2010-06-14 78 views
3

我想知道爲什麼摩托羅拉Milestone 2.1-update1的行爲與仿真器或例如Nexus One。我試圖退出我的應用程序:onDestroy()在this.finish()後不會被調用()

@Override 
protected void onPause() { 
    if(mayDestroyActivity) this.finish(); 
    super.onPause(); 
} 

這適用於Emulator或Nexus One。 onDestroy()onPause()onStop後立即被呼叫。但不是里程碑。相反,onDestroy()在另一個活動啓動時被調用。它在清單中的部分如下所示:

<activity android:name=".MyActivity" 
    android:configChanges="orientation|keyboardHidden" 
android:label="@string/questionnaire_item" 
android:launchMode="singleInstance" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
android:windowSoftInputMode="adjustPan"> 
<intent-filter> 
    <category android:name="android.intent.category.OPENABLE" /> 
</intent-filter> 
</activity> 

有沒有人對此有暗示?我的應用程序依賴於適當退出,因爲我保存onDestroy()

感謝所有的進步,
Steff

回答

2

如果用戶退出到主屏幕,這並不意味着應該退出該應用程序。在大多數情況下,如果應用剛剛進入背景,它將帶來更好的用戶體驗。嘗試依賴saveInstanceState和onPause。

退出一個應用程序被看作是在Android的世界不好的做法,採用了手機,支持多點觸控真能獲得更好的用戶體驗,如果應用程序保持按壓主屏幕後運行良好的系統。

+0

謝謝,我想通了。里程碑的不同行爲使我終於看到事情的正確方向。奇怪但有趣而有用... – stfn 2010-06-15 08:44:55

5

你做錯了。這就是醫生說:

注意:不要在這個方法 算被稱爲一個地方保存 數據! [...]在有些情況下 ,系統簡單地殺死 活動的託管過程中沒有 在 調用此方法(或任何其他人),所以它不應該被用來做是爲了保持 東西這個過程結束後,大約在這個時候。

http://developer.android.com/reference/android/app/Activity.html#onDestroy%28%29

+1

你說得對,我的做法是錯誤的。但無論如何,我希望我的應用程序在用戶退出到主屏幕時傳遞onDestroy()。 – stfn 2010-06-14 10:12:03

+0

沒有辦法做錯誤的做法的權利。 「有些情況下,系統會簡單地殺死活動的託管過程而不調用此方法」是您應該從字面上理解的陳述。 – 2010-06-14 11:41:49

+1

你又對了。我把所有東西都移到了onPause()。也適用。謝謝 – stfn 2010-06-15 08:42:29

2

你應該使用onSaveInstanceState,檢查this鏈接。

相關問題