onActivityResult non essere chiamato dopo OnDestroy
-
02-10-2019 - |
Domanda
onActivityResult è mi dà grandi mal di testa. Il mio piccolo gioco ha una schermata del titolo / del menu. Facendo clic su "nuovo gioco" di un'attività viene lanciato che crea un SurfaceView per il mio mondo di gioco.
Quando si gioca, il giocatore può entrare negli edifici nel mondo di gioco. Entrando un edificio lancio l'attività per quel particolare edificio dal mio SurfaveView. Ecco un esempio:
Intent storeIntent = new Intent(mMinerClass, GeneralStore.class);
storeIntent.putExtra("player", mPlayer.save());
((Activity) mContext).startActivityForResult(storeIntent, Miner.REQUEST_STORE);
mMinerClass è definita nel gioco attività onCreate:
mMap .mMinerClass = Miner.this;
mmap è il SurfaceView. Sto passando un pacco contenente lo stato del lettore. In onActivityResult ho afferrare il pacco restituito dalla attività di negozio e aggiornare lo stato giocatore.
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
Bundle player = intent.getExtras();
mMap.mSavedPlayer = player;
}
mSavedPlayer viene poi utilizzata per impostare il nuovo stato del player.
Tutte le opere di cui sopra in generale
I può entrare negozi, roba buy, ferie e il giocatore viene aggiornato correttamente.
Il problema si manifesta quando si preme il tasto Home (o someyimes tasto back) e OnDestroy viene chiamato. Il mio metodo OnDestroy non fa nulla oltre chiamata super.onDestroy ();
Dopo OnDestroy () viene chiamato onActivityResult non viene chiamato.
1) ho il gioco, everthing funziona alla grande.
2) I stampa a casa e OnDestroy è chiamato
3) rilanciare il mio gioco tramite launcher icona
4) Riprendi gioco. Posso ancora entrare e negozi di lasciare, ma onActivityResult si chiama più.
Ecco qualche uscita logcat. Sto registrando ogni volta che entro in un metodo rilevante.
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
sto postando questo dal mio telefono così si scusa per eventuali errori di battitura muti.
Mi rendo conto ogni intuizione y'all può fornire per quanto riguarda questo. Grazie!
Soluzione
Si dovrebbe mettere ulteriore attenzione su questa linea:
((Activity) mContext).startActivityForResult(storeIntent, Miner.REQUEST_STORE)
Sei sicuro mContext è l'attività giusta? Ho il sospetto che non è l'attività corrente, ma il riferimento a un'altra istanza di attività, il primo che è stato chiuso prima. È possibile utilizzare "questo", invece di mContext?