我遇到了一个问题:当我在我的应用程序中拍照时,我的应用程序打开相机应用程序并拍照,但是当返回活动时,我的设备显示内存不足并且onCreate()函数被调用。 在这种情况下,在onActivityResult()之前调用onCreate()或onCreate()之前调用onActivityResult()? Activity的@Override函数是否有序列图?
public void dispatchTakePictureIntent(int actionCode) {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File dir= new File("/sdcard/Test/");
dir.mkdir();
String fileName = "IMG_"+System.currentTimeMillis()+".JPG";
GlobalData.IMAGE_PATH_CAMERA = "/sdcard/Test/"+fileName;
File output= new File(dir, fileName);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(output));
startActivityForResult(takePictureIntent, 1);
}
感谢高级,
答案 0 :(得分:1)
再次调用onCreate()的原因并不总是因为你的设备内存不足,最常见的原因之一是方向的改变导致活动重新创建,所以你可以尝试将它放在你的清单中文件:
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden|screenSize"
然而,如果你对你的代码进行了足够的实验并得出结论,这是由于内存不足而导致android破坏活动引起的,那么这里有一个可以用来正确恢复你的活动的工作。
YourObject mObject;
.
.
.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mObject.setImageUri(bla..); //Store image Uri and other values in mObject
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
if (mObject != null) {
//save your object which contains data like image uri
savedInstanceState.putSerializable(KEY, mObject);
}
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
YourObject obj = (YourObject) savedInstanceState.getSerializable(KEY);
if(obj != null)
mObject = obj;
}
最后,在onResume中,如果存储的数据不为空
,则从mObject读回存储的数据 @Override
protected void onResume() {
super.onResume();
if(mObject != null) {
//set image to imageView using the stored Uri
setImage(imageView, mObject.getImageUri());
}
}
序列:
OnResume
OnPause
OnSaveInstanceState - Here we save our data in bundle
OnDestroy - Here we lose all our activity data
OnCreate
onRestoreInstanceState - Here we restore our saved data from bundle if any
OnResume - Here we deal with restored data if any
答案 1 :(得分:0)
您的问题在此处的另一个SO问题中得到了回答:https://stackoverflow.com/a/5060245/2898715
在我的应用中,我得到以下工作流程:
onCreate onStart onRestoreInstanceState onActivityResult onResume
因此,是的,
onActivityResult
之后称为onRestoreInstanceState
,因此您可以指望状态已完全恢复(除非您在onResume
中进行了操作)。如果您的Activity在后台时没有被操作系统杀死,那么我认为它的状态是相同的,因此您不必担心。 :)