好吧,在我的应用程序中,我使用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);
}
答案 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似乎是活动本地数据的方式。