2012-09-03 28 views
0

我有一個退出的方法,這是否越來越Android遊戲活動:理解爲什麼在這種情況下

public void quitFinalize(ServicedActivity actCtx) 
{ 
    for (ServicedActivity act : mRunningActivities) 
     launchActivity(actCtx, new Intent(mAppCtx, act.getClass()).setAction("--")); 
} 

檢查發現mRunningActivities是OK.It包括在我的任務創建並沒有被破壞,所有的活動。所有活動繼承:

public class ServicedActivity extends FragmentActivity implements OnClickListener 
{ 
    ... 

    @Override 
    protected void onNewIntent(Intent intent) 
    { 
     super.onNewIntent(intent); 

     if (/*Intent.ACTION_SCREEN_OFF*/"--".equals(intent.getAction()))   // used for quitting the game 
     { 
      finish(); 
     } 
    } 

     ... 
} 

我已經注意到了,在設置2個活動,該機構工作正常。然而,對於3個活動,Android 4.0.3決定它應該啓動(創建)Set中的一個活動的另一個實例(它似乎特別喜歡啓動一個特定的活動,而不是任何活動)。和他們完成他們所有的(因此4個破壞活動,而不是原來3)

我敢肯定它不是我創建活動無意中 - 我所有的launchActivity邏輯是通過追加FLAG_ACTIVITY_REORDER_TO_FRONT標誌的意圖的方法過濾,所以我不能最終得到同一個Activity類的兩個實例。它必須是重新創建它的操作系統。

也試過沒有「機器人:launchMode =‘singleTop’」清單文件屬性 - 它是像這樣的應用程序的所有活動。一樣。

這是怎麼回事?上面的onNewIntent()方法按預期命中3次,但在中間,Android創建一個新的Activity然後立即終止它。

感謝


+0

可能相關:http://stackoverflow.com/questions/11703256/android-activity-intent-remains-after-shutdown – kellogs

回答

0

我已成功錯誤地解決這個問題,看來: 該文檔提到,活動被銷燬/各種事件,如配置更改重新創建。所以我想在所有可能的配置更改上從操作系統竊取控制權;現在的AndroidManifest.xml看起來

<activity android:name=".ui.MainMenu" android:launchMode="singleTop" android:screenOrientation="reverseLandscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
    android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|fontScale" /> 

... etc, same for all activities 

現在,docs還指出:

公共無效onConfigurationChanged(配置NEWCONFIG)由於:由系統調用 API等級1

當設備配置更改,而您的 活動正在運行。請注意,這纔會被調用,如果你有 選擇配置要處理與 configChanges在你的清單屬性。如果任何配置更改 發生未選擇由該屬性報告,然後 而不是報告它,系統將停止並重新啓動活動 (使它與新配置一起啓動)。

我在我的活動中覆蓋了這個方法,它根本不會被調用(比如,20次中的1次)。但問題不復存在,而且這種方法並沒有真正被調用。所以我很困惑。也許這不是我的問題的底部,但..有點相關。

相關問題