每当调用startactivityforresult时,Android都会杀死我的应用程序

时间:2012-01-24 14:57:09

标签: android-intent android-activity android-lifecycle android

好吧,在我的应用程序中,我使用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不会在前台杀死应用程序,我还可以使用此功能吗?我认为我的问题与this one几乎相似。


解决方案

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

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

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

2 个答案:

答案 0 :(得分:9)

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

如果内存不足,你可以并且将会被Android杀死。但它会得到通知,并且有一个非常明确的方法来解决这个问题。

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

在您的应用暂停期间,您应该保存重新创建应用所处状态所需的一切,在应用创建过程中,您应该检查是否要使用完整的savedInstanceState返回并从那里恢复您的应用。

祝你好运。

答案 1 :(得分:1)

您是否考虑使用某种类型的持久存储?在调用新意图之前,将您需要保存的数据保存在持久存储(共享首选项,数据库,文件系统等)中,并使用某种重建标记。然后,如果活动调用onCreate并且标志已启动,则可以恢复先前的活动状态。确保在不需要时清除重建标志,该标志应该在onResume上。

修改

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