重新创建Activity时的onActivityResult()函数?

时间:2014-03-01 04:47:27

标签: java android android-activity oncreate onactivityresult

我遇到了一个问题:当我在我的应用程序中拍照时,我的应用程序打开相机应用程序并拍照,但是当返回活动时,我的设备显示内存不足并且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);
}

感谢高级,

2 个答案:

答案 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在后台时没有被操作系统杀死,那么我认为它的状态是相同的,因此您不必担心。 :)