onActivityResult больше не вызывается после onDestroy
onActivityResult вызывает у меня сильные головные боли. У моей маленькой игры есть заголовок / экран меню. После нажатия "новая игра" запускается действие, которое создает SurfaceView для моего игрового мира.
Во время игры игрок может входить в здания в игровом мире. При входе в здание я запускаю действие для этого конкретного здания из моего SurfaveView. Вот пример:
Intent storeIntent = new Intent(mMinerClass, GeneralStore.class);
storeIntent.putExtra("player", mPlayer.save());
((Activity) mContext).startActivityForResult(storeIntent, Miner.REQUEST_STORE);
mMinerClass определяется в игре Activity onCreate:
mMap .mMinerClass = Miner.this;
mMap - это SurfaceView. Я передаю комплект, содержащий состояние игрока. В onActivityResult я беру пакет, возвращенный активностью магазина, и обновляю состояние игрока.
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
Bundle player = intent.getExtras();
mMap.mSavedPlayer = player;
}
mSavedPlayer позже используется, чтобы установить новое состояние игрока.
Все вышеперечисленное работает вообще
Я могу войти в магазины, купить вещи, уйти, и игрок обновляется правильно.
Проблема проявляется, когда я нажимаю кнопку "Домой" (или кнопку "Назад") и вызывается onDestroy. Мой метод onDestroy ничего не делает, кроме вызова super.onDestroy();
После вызова onDestroy () onActivityResult больше не вызывается.
Так:
1) Я играю в игру, все прекрасно работает.
2) жму домой и ондестрой называется
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
Я публикую это со своего телефона, так что извините за любые глупые опечатки.
Я ценю любую информацию, которую вы можете предоставить по этому поводу. Спасибо!
1 ответ
Вы должны уделить дополнительное внимание этой строке:
((Activity) mContext).startActivityForResult(storeIntent, Miner.REQUEST_STORE)
Вы уверены, что mContext - правильная деятельность? Я подозреваю, что это не текущее действие, а ссылка на другой экземпляр действия, первый, который был закрыт ранее. Можете ли вы использовать "это" вместо mContext?