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

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

我有一个活动内的地图片段。 简单。 打开存储权限以允许显示地图,工作正常。 通过按Homebutton背景应用程序,然后closures存储权限,并从最近的任务,应用程序崩溃打开应用程序。

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

看起来应用程序进程在更改权限时被终止,从而重新创build了活动。

09-24 14:42:55.071: E/AndroidRuntime(12918): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 09-24 14:42:55.071: E/AndroidRuntime(12918): Caused by: java.lang.NullPointerException: Attempt to write to field 'int android.support.v4.app.Fragment.mNextAnim' on a null object reference 09-24 14:42:55.071: E/AndroidRuntime(12918): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:718) 09-24 14:42:55.071: E/AndroidRuntime(12918): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489) 09-24 14:42:55.071: E/AndroidRuntime(12918): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:548) 

从活动super.onStart()

  • Android M:以编程方式撤消权限
  • 在Android中拨打911
  • 如何修复不受保护的SMS BroadcastReceiver lint警告
  • 我什么时候应该使用ACCESS_COARSE_LOCATION权限?
  • 拨号号码没有提示
  • Android studio在真实设备上运行应用程序后添加了不必要的权限
  • Redmi手机不要求短信权限,因此不读短信
  • Android:请求代码值select什么?
  • 现在可行的解决scheme只是调用getSupportFragmentManager().popBackStackImmediate(); 在Activity的onCreate()中,以防止试图重新创build地图片段。

    在这种情况下popBackStack()将不起作用,因为它是asynchronous的。

    大概有点晚了,还可以帮助别人在未来:)

    你应该检查看看savedInstanceState是否传递给onCreate(Bundle savedInstanceState) 。 如果只有null那么像这样启动Fragment

     @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout_file); if (savedInstanceState == null) { // do fragment transactions here } } 

    我有类似的问题与应用程序的权限的dynamic变化。 经过一番挖掘,我的理解也可能对你有所帮助。

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

    这里需要注意的一点很重要,就是终止片段状态保存在保存的实例对象中。

    要停止崩溃,你应该使用这一行代码得到片段实例 –

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

    这里“MAP FRAG”是你必须给你的片段的标签。

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