Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 权限设置更改后,从最近的任务重新打开时调用onCreate()_Android_Android Fragments_Android Permissions_Android 6.0 Marshmallow - Fatal编程技术网

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

Android 权限设置更改后,从最近的任务重新打开时调用onCreate(),android,android-fragments,android-permissions,android-6.0-marshmallow,Android,Android Fragments,Android Permissions,Android 6.0 Marshmallow,题目听起来可能很复杂,但这是我的情况 我有一个活动中的地图片段。简单。 打开存储权限以允许显示地图,工作正常。 按Home按钮启动应用程序,然后关闭存储权限并从最近的任务打开应用程序,应用程序崩溃 问题不是调用宿主活动的onResume(),而是调用宿主活动的onCreate()以及映射片段的onCreateView()。因此,它抛出了异常 当权限更改时,应用程序进程似乎被终止,因此活动被重新创建 09-24 14:42:55.071: E/AndroidRuntime(12918):

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

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

问题不是调用宿主活动的onResume(),而是调用宿主活动的onCreate()以及映射片段的onCreateView()。因此,它抛出了异常

当权限更改时,应用程序进程似乎被终止,因此活动被重新创建

    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()开始,现在可行的解决方案就是调用
getSupportFragmentManager().popbackackimmediate()位于活动的onCreate()中,以防止尝试重新创建映射片段


popBackStack()在这种情况下不起作用,因为它是异步的

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

您应该检查
savedInstanceState
是否为
null
,并将其传递给
onCreate(Bundle savedInstanceState)
。如果它是
null
,则按如下方式启动
片段:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_layout_file);

        if (savedInstanceState == null) {
            // do fragment transactions here
        }
    }

在应用程序权限的动态更改方面,我也遇到了类似的问题。经过一些挖掘,我所理解的可能对你也有帮助

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

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

要停止崩溃,您应该使用以下代码行获取片段实例-

mapFragment = (MapFragment)getSupportFragmentManager().findFragmentByTag("MAP FRAG");
这里的“地图碎片”是一个标签,你必须给你的碎片


如果您有任何疑问,请与他人分享。

生命周期方法尚未更改。发生的情况是该活动已被系统破坏。这就是重新创建活动和调用onCreate的原因。您是说该活动由于权限更改而被销毁吗?因为onResume()通常被调用,所以当该活动的权限发生更改时,会调用onCreate(),在我的例子中,是活动中的映射片段。当权限发生更改时,该活动始终被调用destroyed@greywolf82是 啊但问题是依赖于许可的相关片段仍然存在,导致应用程序崩溃。我发现整个讨论很难相信。您能否将日志添加到您的
活动中的所有生命周期方法中
,以便我们能够准确地看到权限更改时发生的情况?这对于真正理解这一点非常有用。好的,但在调用onCreate()之后,也会调用ondestroy(),这样应用程序就会关闭。savedInstanceState是否阻止我的应用程序完成?@MiloRambaldi
savedInstanceState
仅包含有关应用程序最后状态的信息(如果由于RAM不足或在这种情况下切换任何类型的权限而被系统停止)。它无法阻止应用程序被杀死。