更改权限设置后,从最近的任务重新打开时会调用onCreate()

时间:2015-09-24 00:46:46

标签: android android-fragments android-permissions android-6.0-marshmallow

问题标题可能听起来很复杂,但这是我的情况。

我在活动中有一个地图片段。简单。 打开存储权限以允许显示Map,工作正常。 通过按Home键来关闭应用程序,然后关闭存储权限并从最近的任务打开应用程序,应用程序崩溃。

问题不是调用主机Activity的onResume(),而是在主机Activity上调用onCreate()以及Map片段的onCreateView()。因此它抛出异常。

似乎应用程序进程在更改权限时被杀死,因此重新创建了Activity。

hidden

来自Activity

的super.onStart()

3 个答案:

答案 0 :(得分:1)

我在app的权限动态变化方面遇到了类似的问题。经过一番挖掘后,我所理解的对你也有帮助。

更改权限会导致系统终止您的应用程序,现在如果您从概览屏幕打开应用程序,它将重新启动您的应用程序,这是导致崩溃的主要原因,因为您可能正在对片段对象执行操作,现在是空的。

需要注意的一点是,在终止之前,片段状态保存在savedinstance对象中。

要停止崩溃,你应该使用这行代码来获取片段实例 -

mapFragment = (MapFragment)getSupportFragmentManager().findFragmentByTag("MAP FRAG");

这里" MAP FRAG"是你必须给你的片段提供的标签。

如果你有任何困惑,请分享。

答案 1 :(得分:0)

现在可行的解决方案就是在Activity的onCreate()中调用getSupportFragmentManager().popBackStackImmediate();,以防止尝试重新创建地图片段。

popBackStack()在这种情况下不会工作,因为它是异步的。

答案 2 :(得分:0)

可能有点晚了,将来可能会帮助别人:)

您应该检查传递给savedInstanceState的{​​{1}}是否为null。如果它只是onCreate(Bundle savedInstanceState),请启动null,如下所示:

Fragment