这是我的设置:
Activity -> FragmentWithPages -> ViewPager{Fragment1, Fragment2}
我从 Fragment1 启动 DialogFragment,然后从 DialogFragment 启动 ActivityForResult 以实现隐式相机拍照 Intent 。
问题:
有时,当从相机返回时,我的应用程序会在 Fragment1 的 onActivityResult 内崩溃。为什么会出现这种情况?现在了解 onActivityResult 的回调链。它将按照 Activity.onActivityResult -> FragmentWithPages.onActivityResult -> Fragment1.onActivityResult -> DialogFragment.onActivityResult
的顺序返回。所以我的问题是,为什么当我执行 mDialogFragment.onActivityResult(...)
时 DialogFragment
为 null?
我想这可能与内存有关:系统杀死我的应用程序,然后在相机应用程序返回后重新启动它。但如果是这样的话,为什么 DialogFragment
是链中断开的链接?我该怎么做才能防止这个问题或像没有发生任何问题一样处理它?</p>
所以不,我并不是想简单地捕获 NPE,这并没有多大作用,因为它会使我拍照的整个目的失效。
最佳答案
当您从 startActivityForResult()
返回时,无法保证 Activity 实例相同。系统可以自由地处理为结果而启动的 Activity,并重建它以处理 onActivityResult()
调用。
如果发生这种情况,这当然意味着您之前分配的任何实例字段将不再如此。您可以使用 onSaveInstanceState()
并使用传入 onCreate()
的已保存实例状态 Bundle
重建您的 Activity 实例。
您可以通过在设备上的开发者设置中设置“不保留 Activity ”来测试此场景。
关于android - 为什么 onActivityResult 中 Fragment 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34346597/