1

囲んでいるアクティビティの onPause() および onResume() メソッドの間に GLSurfaceview に対して onPause() および onResume() を呼び出す必要があることを繰り返し読みました。これは、レンダリング スレッドを停止して再起動し、リソースを節約することだと思います。ただし、レンダリング スレッドの onDraw メソッドの各反復をログに記録すると、ホーム ボタンまたは戻るボタンを押すと onDraw の呼び出しが停止し、アプリに戻ると onSurfaceCreated と onSurfaceChanged が呼び出され、次に onDraw が呼び出されることがわかります。再開を呼び出します-対応するアクティビティメソッドで GLSurfaceview の onPause() および onResume() メソッドへの呼び出しを削除した後でも。レンダリング スレッドが停止していない場合、この動作をどのように見ていますか? onDraw が呼び出されなくなったにもかかわらず、レンダリング スレッドは何らかの形でまだ生きていますか? また、アクティビティがフォーカスを失ったときにレンダリング スレッドが自動的にシャットダウンされる場合、なぜ onPause() と onResume() の GLSurfaceview バージョンを呼び出す必要があるのでしょうか?

4

1 に答える 1

1

と を呼び出すのをGLSurfaceView忘れることを許容することで賢くしようとするバグのようです。これが意図的なものかどうかはわかりません。onResume()onPause()

ほとんどの場合、呼び出しをそのままにしておいても問題ありませんが、状況によっては奇妙な動作やクラッシュが発生する可能性があります。これらの状況が何であるかは正確にはわかりませんが、不明なonResume()/onPause()呼び出しに起因するいくつかの奇妙なクラッシュを追跡しました。それらを呼び出さないと、ステートマシンで何かが少し混乱しGLSurfaceViewます-「自動的に」再開して一時停止するフォールバックロジックが100%のケースでトリガーされないようです。

于 2013-03-19T10:01:15.480 に答える