有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android onCreate在手机重新启动后调用了两次,使fragment停止工作

我为Android编写了一个应用程序,当它在手机重新启动后立即启动时出现问题(崩溃)。由于某种原因,再次调用OnCreate方法。我认为这可能是问题所在,但在研究之后,我发现安卓系统可能会在启动后回忆onCreate,因为它仍在启动系统服务,例如获取“MCM”

在MainActivity中的应用程序中,我有一个通过XML绑定的静态绑定片段。片段中包含检查是否授予位置权限的代码:

if (ActivityCompat.checkSelfPermission(this.getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this.getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)

问题是,这个。getContext()返回null!这肯定与onCreate被多次调用有关,因为当手机未启动且onCreate仅在应用程序工作正常时才被调用

以下是我在main活动中对onCreate方法中片段的唯一引用:

安卓.support.v4.app.Fragment fragMap = getSupportFragmentManager().findFragmentById(R.id.mv_1);

    if (fragMap instanceof FragmentMap)
    {
        theMap = (FragmentMap) fragMap;
    }

下面是通过XML绑定的片段:

<fragment
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content"
    安卓:layout_weight="1"
    安卓:id="@+id/mv_1"
    安卓:name="com.sunhillo.personneltrackerv002.FragmentMap"
    安卓:layout_alignParentBottom="true"
    安卓:layout_alignParentLeft="true"
    安卓:layout_alignParentStart="true"
    安卓:layout_alignParentTop="true"
    安卓:layout_marginBottom="64dp"/>

非常感谢您提供的任何帮助!我对Android编程还是个新手,我正在尝试学习细节


共 (2) 个答案

  1. # 1 楼答案

    您应该使用启动模式Single Task或Single top,这将避免调用multiple onCreate,并且应该使用getApplicationContext()

  2. # 2 楼答案

    如果您的最终目的是访问位置权限,只需在清单文件中添加这些权限即可。如果您希望通过java执行此检查,请不要将其添加到单个片段中。仅将此语法添加到引用片段的MainActivity java文件。我希望这有帮助。:)