0

Android でのゲームに問題があります。ゲーム アクティビティで電源ボタンを押して画面を無効にしてから電話を起動すると、約 1 分間黒い画面が表示され、その後アプリケーションがクラッシュします。ホームボタンを押してアクティビティを一時停止してからゲームに戻ると、すべて問題ないように見えます。

これは、目覚めた後に見つけたアプリに関するログの唯一の入り口です。

12-11 18:27:18.187: WARN/InputConnectionWrapper.ICC(19863): Timed out waiting on IInputContextCallback
12-11 18:27:18.442: WARN/WindowManager(19653): App freeze timeout expired.
12-11 18:27:18.442: WARN/WindowManager(19653): Force clearing freeze: AppWindowToken{40f140c8 token=Token{412d25e8 ActivityRecord{40eb01a0 pl.priv.robertszuba/pl.priv.mallwar.game.GameActivity}}}
12-11 18:27:20.212: WARN/InputConnectionWrapper.ICC(19863): Timed out waiting on IInputContextCallback
12-11 18:27:20.512: WARN/ActivityManager(19653): Activity idle timeout for ActivityRecord{40eb01a0 pl.priv.robertszuba/pl.priv.mallwar.game.GameActivity}
12-11 18:27:20.737: DEBUG/dalvikvm(19653): GC_EXPLICIT freed 1532K, 46% free 9743K/17735K, paused 13ms+7ms
12-11 18:27:22.237: WARN/InputConnectionWrapper.ICC(19863): Timed out waiting on IInputContextCallback
12-11 18:27:24.262: WARN/InputConnectionWrapper.ICC(19863): Timed out waiting on IInputContextCallback
12-11 18:27:26.337: WARN/InputConnectionWrapper.ICC(19863): Timed out waiting on IInputContextCallback
12-11 18:27:28.457: WARN/InputConnectionWrapper.ICC(19863): Timed out waiting on IInputContextCallback
12-11 18:27:54.107: DEBUG/dalvikvm(20893): GC_CONCURRENT freed 1788K, 32% free 6141K/8967K, paused 3ms+5ms
12-11 18:28:06.597: DEBUG/dalvikvm(19653): GC_CONCURRENT freed 1832K, 45% free 9805K/17735K, paused 3ms+5ms

アプリをデバッグしようとすると、アプリが正しく一時停止され、ウェイクアップonResumeが呼び出された後、すべてが正常にonResume行われていることがわかりましたが、その後は呼び出されませんonSurffaceCreate

4

1 に答える 1

0

アプリケーションが一時停止されている場合、再開時に OpenGL コンテキストは有効ではありません。データ、オブジェクト、テクスチャをドライバー メモリに再度アップロードする必要があります。onPause/onResume ごとにデータをアンロードおよびリロードします。より安全です。

このリンクには詳細情報が含まれています: http://developer.android.com/reference/android/opengl/GLSurfaceView.html

アクティビティが一時停止および再開されたときに、GLSurfaceView に通知する必要があります。GLSurfaceView クライアントは、アクティビティが一時停止するときに onPause() を呼び出し、アクティビティが再開するときに onResume() を呼び出す必要があります。これらの呼び出しにより、GLSurfaceView はレンダリング スレッドを一時停止および再開でき、GLSurfaceView は OpenGL ディスプレイを解放して再作成することもできます。

処理方法に関するヒントについては、次のリポジトリを確認してください: https://github.com/TraxNet/ShadingZen (すべてのエンジン アセットは Resource クラスから拡張され、アプリの一時停止/再開時にデータをロードおよびアンロードするロジックが含まれています)。

于 2012-12-11T18:54:11.207 に答える