2011-12-28 58 views
0

我正在設計一個android遊戲,我只想要它的一個實例。android singleTask/singleInstance問題

遊戲具有我稱爲GameActivity的主要活動以及另一個稱爲CreateAccountActivity的活動。

我將清單中的GameActivity定義爲android:launchMode="singleTask"

當應用程序第一次啓動時,我使用startActivityForResult方法啓動CreateAccoutActivity。

問題是,當我點擊主頁按鈕,然後啓動我的應用程序,沒有任何反應(從用戶的角度來看,但我從日誌中看到CreateAccountActivity被銷燬,GameActivity onActivityResult被調用,然後它也被銷燬了。得到RESULT_CANCEL關閉過程

這裏的日誌:

12-28 14:30:11.910: V/WindowManager(24745): Dsptch > Window{47ce9868 com.sec.android.app.twlauncher/com.sec.android.app.twlauncher.Launcher paused=false} 
12-28 14:30:11.910: V/InputDevice(24745): ID[0]=0(0) Dn(0=>1) 
12-28 14:30:11.973: D/dalvikvm(7770): GC_EXTERNAL_ALLOC freed 313 objects/12648 bytes in 25ms 
12-28 14:30:12.004: V/InputDevice(24745): ID[0]=0(0) Up(1=>0) 
12-28 14:30:12.039: D/dalvikvm(7770): GC_EXTERNAL_ALLOC freed 88 objects/2680 bytes in 25ms 
12-28 14:30:12.110: D/dalvikvm(7770): GC_EXTERNAL_ALLOC freed 24 objects/864 bytes in 25ms 
12-28 14:30:12.157: V/WindowManager(24745): Dsptch > Window{47ce9868 com.sec.android.app.twlauncher/com.sec.android.app.twlauncher.Launcher paused=false} 
12-28 14:30:12.157: I/ActivityManager(24745): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.*****.tq/.GameActivity } 
12-28 14:30:12.161: D/Launcher.Workspace(7770): WorkspaceDraw: Workspace drawWallpaperImage() 
12-28 14:30:12.168: I/CreateAccountActivity(9369): onDestroy 
12-28 14:30:12.172: I/Launcher(7770): onPause() 
12-28 14:30:12.184: W/Launcher(7770): WallpaperManager setVisibility visible true 
12-28 14:30:12.203: I/GameActivity(9369): Game activity onActivityResult 
12-28 14:30:12.203: I/GameActivity(9369): disconnecting from main server 
12-28 14:30:12.203: I/ConnectionManager(9369): Disconnecting... 
12-28 14:30:12.207: I/GameActivity(9369): Game activity onNewIntent is called 
12-28 14:30:12.215: I/Launcher(7770): onWindowFocusChanged(false) 
12-28 14:30:12.219: I/Launcher(7770): onResume(). mIsNewIntent : false 
12-28 14:30:12.219: E/Launcher(7770): MTP-LAUNCHER: media scanning not yet finished . 
12-28 14:30:12.219: I/Launcher(7770): onResume() ended 
12-28 14:30:12.219: I/Launcher(7770): onWindowFocusChanged(true) 
12-28 14:30:12.223: W/InputManagerService(24745): Window already focused, ignoring focus gain of: [email protected] 
12-28 14:30:12.227: D/Launcher.Workspace(7770): WorkspaceDraw: Workspace drawWallpaperImage() 
12-28 14:30:12.235: I/GameActivity(9369): Game activity destroyed 
12-28 14:30:12.762: D/BatteryService(24745): update start 
12-28 14:30:12.770: D/BatteryService(24745): updateBattery level:100 scale:100 status:5 health:2 present:true voltage: 4240 temperature: 360 technology: Li-ion AC powered:false USB powered:true icon:17302163 
12-28 14:30:12.801: I/StatusBarPolicy(24745): BAT. status:5 health:2 
12-28 14:30:12.801: D/WifiService(24745): ACTION_BATTERY_CHANGED pluggedType: 2 
12-28 14:30:13.231: W/Launcher(7770): WallpaperManager setVisibility visible false 
12-28 14:30:13.375: D/Launcher.Workspace(7770): WorkspaceDraw: Workspace drawWallpaperImage() 

爲簡單起見,我描述它這樣的: 活性A = MAIN - singleTask 活性B =(未定義 - 標準)

一個startsForResult乙 - >主頁按鈕 - >遊戲啓動按鈕 - >乙被毀 - >一個onActivityResult被稱爲 - >已銷燬 - >遊戲啓動按鈕 - >一個startstForResult乙...

編輯

我現在懷疑我是否需要使用singleTask。

是真的嗎,無論從哪裏開始我的活動是由android而不是由我編碼的意圖,android會始終重新啓動我的應用程序,並且不會有任何多個我的活動實例?

,如果是這樣的話,任何事情都是咕-ood :)

+0

請張貼您的清單。你描述的行爲很奇怪。 – 2015-02-01 21:52:40

回答

0

從活動文檔

一個「singleTask」活動可能會或可能不會有它 堆棧中的其他活動。如果確實如此,它無法處理意圖, 並且意圖被丟棄。 (即使意圖下降,其 的到來會造成來到前臺,在那裏 仍將任務。)

當你點擊遊戲一經推出,創造這個Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.*****.tq/.GameActivity 的GameActivity(A )正試圖處理onNewIntent()中的意圖。你可以把一個Log.d(「GameActivity」,「onNewIntent被調用」)來驗證這一點。 (B)在結果可以被設定之前被簡單地銷燬。

也許你可以在CreateAccountActivity.onDestroy()中設置結果(),以便你可以在GameActivity中處理它?

+0

我有一個Log.i(「GameActivity」,「onNewIntent被調用」),你可以在我的問題的代碼中看到。它在B被銷燬之後。 – piojo 2011-12-28 17:19:28