问题标题可能听起来很复杂,但这是我的情况。
我在活动中有一个地图片段。简单。 打开存储权限以允许显示Map,工作正常。 通过按Home键来关闭应用程序,然后关闭存储权限并从最近的任务打开应用程序,应用程序崩溃。
问题不是调用主机Activity的onResume(),而是在主机Activity上调用onCreate()以及Map片段的onCreateView()。因此它抛出异常。
似乎应用程序进程在更改权限时被杀死,因此重新创建了Activity。
hidden
来自Activity
的super.onStart()答案 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