我有一个问题:当我在应用程序中拍照时,我的应用程序打开相机应用程序并拍照,但是当返回活动时,我的设备内存不足,并且调用了onCreate()函数。在这种情况下,在onCreate()之前调用onActivityResult()或在onActivityResult()之前调用onCreate()?活动的@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);
}
非常感谢,
再次调用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不为null,则从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
您的问题在此处的另一个SO问题中得到了回答:https://stackoverflow.com/a/5060245/2898715
在我的应用中,我得到以下工作流程:
onCreate onStart onRestoreInstanceState onActivityResult onResume
所以,是,在
onActivityResult
之后称为onRestoreInstanceState
,因此您可以指望状态已完全恢复(除非您在onResume
中执行了某项操作)。如果您的Activity在后台时未被操作系统杀死,那么我认为它的状态是相同的,因此您不必担心。 :)