2

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

私はこれを私の電話から投稿しているので、ばかげたタイプミスを許してください。

これに関して、すべての人が提供できる洞察に感謝します。ありがとう!

4

1 に答える 1

4

次の行にさらに注意を払う必要があります。

((Activity) mContext).startActivityForResult(storeIntent, Miner.REQUEST_STORE)

mContext が正しいアクティビティであると確信していますか? 現在のアクティビティではなく、以前に閉じられた最初のアクティビティ インスタンスへの参照であると思われます。mContext の代わりに「this」を使用できますか?

于 2010-07-06T01:55:30.953 に答える