在this.finish()之后不会调用onDestroy()

时间:2010-06-14 09:49:15

标签: android milestone

我想知道为什么具有2.1-update1的摩托罗拉里程碑与仿真器的行为不同或者例如Nexus One。我正试图退出我的应用程序:

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

这适用于模拟器或Nexus One。在onDestroy()onPause()之后立即调用onStop。但不是里程碑。而是在启动另一个Activity时调用onDestroy()。它在Manifest中的部分看起来像这样:

<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

3 个答案:

答案 0 :(得分:5)

你做错了。这就是Doc所说的:

  

注意:不要指望这种方法   被称为储蓄的地方   数据! [...]有些情况   系统将简单地杀死   活动的托管过程没有   在中调用此方法(或任何其他方法)   它,所以它不应该被用来做   那些打算留下的东西   在这个过程消失之后。

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

答案 1 :(得分:2)

您应该使用onSaveInstanceState,查看this链接。

答案 2 :(得分:2)

如果用户退出主屏幕,则无需表示应退出应用程序。在大多数情况下,如果应用程序转到后台,它将提供更好的用户体验。尝试依赖saveInstanceState和onPause。

退出应用程序在Android世界中被认为是不好的做法,如果应用程序在按下主屏幕后继续运行,那么具有良好系统的真正多点触控的手机可以获得更好的用户体验。