2010-06-14 77 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链接。

相关问题