onActivityResultは私に大きな頭痛の種を与えています。私の小さなゲームにはタイトル/メニュー画面があります。「新しいゲーム」をクリックすると、アクティビティが起動し、ゲームの世界にSurfaceViewが作成されます。
プレイするとき、プレイヤーはゲームの世界の建物に入ることができます。建物に入ると、SurfaveViewからその特定の建物のアクティビティを起動します。次に例を示します。
Intent storeIntent = new Intent(mMinerClass, GeneralStore.class);
storeIntent.putExtra("player", mPlayer.save());
((Activity) mContext).startActivityForResult(storeIntent, Miner.REQUEST_STORE);
mMinerClassは、ゲームActivityonCreateで定義されています。
mMap .mMinerClass = Miner.this;
mMapはSurfaceViewです。プレーヤーの状態を含むバンドルを渡します。onActivityResultで、ストアアクティビティによって返されたバンドルを取得し、プレーヤーの状態を更新します。
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
Bundle player = intent.getExtras();
mMap.mSavedPlayer = player;
}
mSavedPlayerは、後で新しいプレーヤーの状態を設定するために使用されます。
上記のすべては一般的に機能します
私は店に入ったり、物を買ったり、去ったりすることができ、プレーヤーは正しく更新されます。
ホームボタン(またはsomeyimesの戻るボタン)を押してonDestroyが呼び出されると、問題が発生します。私のonDestroyメソッドは、super.onDestroy()を呼び出す以外に何もしません。
onDestroy()が呼び出された後、onActivityResultは呼び出されなくなります。
それで:
1)私はゲームをプレイしますが、すべてがうまく機能します。
2)私は家に押して、ondestroyは呼ばれます
3)ランチャーアイコンを使用してゲームを再起動します
4)ゲームを再開します。ストアに出入りすることはできますが、onActivityResultは呼び出されなくなります。
これがlogcatの出力です。関連するメソッドを入力するたびにログに記録しています。
App start. Resuming a saved game
07-03 00:33:04.759: ERROR/Miner(4014): -->onCreate
07-03 00:33:04.819: ERROR/Miner(4014): -->onStart
07-03 00:33:08.329: ERROR/Miner(4014): -->onResume
Enter store and buy stuff 2 times. Everything working great.
07-03 00:33:30.419: ERROR/Miner(4014): -->onPause
07-03 00:33:31.279: ERROR/Miner(4014): -->onStop
07-03 00:33:35.069: ERROR/Miner(4014): -->onActivityResult
07-03 00:33:35.069: ERROR/Miner(4014): -->onRestart
07-03 00:33:35.069: ERROR/Miner(4014): -->onStart
07-03 00:33:36.709: ERROR/Miner(4014): -->onResume
07-03 00:33:42.129: ERROR/Miner(4014): -->onPause
07-03 00:33:43.289: ERROR/Miner(4014): -->onStop
07-03 00:33:55.279: ERROR/Miner(4014): -->onActivityResult
07-03 00:33:55.279: ERROR/Miner(4014): -->onRestart
07-03 00:33:55.279: ERROR/Miner(4014): -->onStart
07-03 00:33:56.879: ERROR/Miner(4014): -->onResume
Back button pressed bringing me to title screen
07-03 00:35:26.283: ERROR/Miner(4014): -->onPause
07-03 00:35:27.153: ERROR/Miner(4014): -->onStop
07-03 00:35:27.333: ERROR/Miner(4014): -->onDestroy
Resume Game
07-03 00:36:12.953: ERROR/Miner(4014): -->onCreate
07-03 00:36:13.003: ERROR/Miner(4014): -->onStart
07-03 00:36:14.663: ERROR/Miner(4014): -->onResume
Enter store and buy stuff twice. No more onActivityResult
07-03 00:36:52.063: ERROR/Miner(4014): -->onPause
07-03 00:36:52.863: ERROR/Miner(4014): -->onStop
07-03 00:36:59.913: ERROR/Miner(4014): -->onRestart
07-03 00:36:59.913: ERROR/Miner(4014): -->onStart
07-03 00:37:01.593: ERROR/Miner(4014): -->onResume
07-03 00:37:23.353: ERROR/Miner(4014): -->onPause
07-03 00:37:24.173: ERROR/Miner(4014): -->onStop
07-03 00:37:29.173: ERROR/Miner(4014): -->onRestart
07-03 00:37:29.173: ERROR/Miner(4014): -->onStart
07-03 00:37:30.793: ERROR/Miner(4014): -->onResume
私はこれを私の電話から投稿しているので、ばかげたタイプミスを許してください。
これに関して、すべての人が提供できる洞察に感謝します。ありがとう!