Dmi*_*dov 6 android fragment onactivityresult
感谢这个答案Android Fragment生命周期问题(onActivityResult上的NullPointerException)我在调用startActivityForResult后在片段中收到NPE时设法重新创建了一个场景.所以我有
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, PHOTO_SELECT_REQUEST_CODE);
break;
Run Code Online (Sandbox Code Playgroud)
从我的片段调用,然后我的活动接收onPause,onStop和onDestroy,因此调用的片段也startActivityForResult获得onDestroy.在我选择一个图像之后,我在我的活动上获得了一个新的onCreate,然后我获得了一个public void onActivityResult现在被破坏的原始片段.
我的问题是,由于这是潜在的(虽然是罕见的)情况,如何恢复传递给它们的整个片段和对象,以及如何防止原始片段泄漏?
当您的代码执行以下行时:
startActivityForResult(photoPickerIntent, PHOTO_SELECT_REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)
您的活动将会得到onPause(),onStop()但不是onDestroy()每次都会。如果 Android 系统在运行时内存不足,那么您的 Activity 可能会onDestroy()
用于保存片段和活动的状态并防止泄漏:
将您的状态保存在onSaveInstanceState(Bundle)
在系统需要更多内存的情况下,它可能会杀死暂停的进程(之后
onPause())以回收资源。因此,您应该确保从该函数返回时所有状态都已保存。一般onSaveInstanceState(Bundle)用于保存活动中的每个实例状态,此方法用于存储全局持久数据(在内容提供程序、文件等中)
恢复您的状态onRestoreInstanceState(Bundle)
onRestoreInstanceState(Bundle)onStart()方法在从先前保存的状态重新初始化活动后调用,在 中给出savedInstanceState。大多数实现将简单地用于onCreate(Bundle)恢复其状态,但有时在完成所有初始化后在这里执行此操作或允许子类决定是否使用默认实现是很方便的。此方法的默认实现会恢复之前被 冻结的任何视图状态onSaveInstanceState(Bundle)。
这可以帮助您实现您的要求
| 归档时间: |
|
| 查看次数: |
1583 次 |
| 最近记录: |