3

好吧,在我的应用程序中,我使用默认相机和 Android 画廊 startActivityforResult 作为;

Intent i = new Intent("android.intent.action.PICK",
                       MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
i.setType("image/*");
startActivityForResult(i, this.SELECT_PICTURE);

我也能赶上 onActivityResult 。但是,如果内存不足并且我启动了此活动,我会体验到系统正在杀死我的父活动,即使活动返回一个值,我也会丢失所有局部变量(并且再次调用 onCreate())。只有 onResume() 应该被再次调用。

我试了几次,我很确定它与内存问题有关。如果有足够的内存进程成功执行。我怎样才能防止这种行为?

由于Android不会在前台杀死应用程序,我还可以使用此功能吗?我认为我的问题与这个几乎相似。


解决方案

除了Yahel提供的解决方案外,还可以使用以下方法。

@Override
public void onSaveInstanceState(Bundle savedInstanceState){
   super.onSaveInstanceState(savedInstanceState);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState){
   super.onRestoreInstanceState(savedInstanceState);
}
4

2 回答 2

9

您需要仔细阅读必须阅读的代码文章:http: //developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

如果内存不足,您的活动可以并且将被 Android 杀死。但它会收到通知,并且有一种非常明确的方式来处理这个问题。

Bundle savedInstanceState这是在您的所有活动 oncreate中存在的原因:public void onCreate(Bundle savedInstanceState)

在您的应用程序暂停期间,您应该保存重新创建应用程序所在状态所需的所有内容,并且在您的应用程序的 oncreate 期间,您应该检查您是否返回完整的 savedInstanceState 并从那里恢复您的应用程序。

祝你好运。

于 2012-01-24T15:26:24.450 回答
1

您是否考虑过使用某种类型的持久存储?在调用新意图之前,将需要保存在持久存储中的数据(共享首选项、数据库、文件系统等)保存,并带有某种重建标志。那么如果activity调用了onCreate并且flag为up,就可以恢复之前的activity状态。确保在不需要时清除重建标志,它应该在 onResume 中。

编辑:

onSaveInstanceState 似乎是活动本地数据的方式。

于 2012-01-24T15:04:07.980 回答