2010-07-03 116 views
2

onActivityResult給我帶來很大的麻煩。我的小遊戲有一個標題/菜單屏幕。點擊「新遊戲」後,會啓動一個Activity,爲我的遊戲世界創建一個SurfaceView。onActivityResult在onDestroy之後不再被調用

玩耍時,玩家可以進入遊戲世界的建築物。進入建築物後,我從SurfaveView啓動該建築的活動。下面是一個例子:

Intent storeIntent = new Intent(mMinerClass, GeneralStore.class); 
    storeIntent.putExtra("player", mPlayer.save()); 
    ((Activity) mContext).startActivityForResult(storeIntent, Miner.REQUEST_STORE); 

mMinerClass在遊戲活動的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後來用於設置新的玩家狀態。

以上所有作品一般

我可以進入商店,買東西,離開,玩家正確更新。

問題我按Home按鈕(或someyimes後退按鈕)和onDestroy被調用時顯示。我的onDestroy方法除了調用super.onDestroy();

onDestroy()被調用onActivityResult不再被調用。

所以:

1)我玩遊戲,everthing的作品很棒。

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 

我發佈這個從我的手機,所以原諒任何愚蠢的錯別字。

我很感激你們都可以提供有關這方面的任何洞察力。謝謝!

+0

對不起,我認爲這將是自動的。我想我現在正確地授予它。 – 2010-07-12 16:57:09

回答

4

你應該把更多的關注到這條線:

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

你確定mContext是正確的活動?我懷疑這不是當前的活動,而是對另一個活動實例的引用,這是第一個之前關閉的活動實例。你可以使用「this」而不是mContext嗎?

+0

謝謝。我要去調查一下,這聽起來很有道理。我是一個Java傻瓜。謝謝你給我一些指導,如果它有效,賞金就是你的。 – 2010-07-06 15:05:32

+2

那很簡單。我現在可以吻你。 – 2010-07-06 15:12:09

相關問題