手机重启后Android onCreate调用两次,使片段停止工作

时间:2016-06-23 18:34:45

标签: java android android-layout android-fragments android-xml

我已经编写了一个Android应用程序,它在重启手机后立即启动(在5秒内左右)时出现问题(崩溃)。由于某种原因,OnCreate方法第二次被调用。我认为这可能是问题,但在研究完之后,我发现android系统可能会在启动后回想起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)

问题是,this.getContext()返回null!这肯定与onCreate不止一次被调用的事实有关,因为当手机没有启动时,onCreate仅在应用程序完美运行时被调用!

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

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

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

这是通过 XML

绑定的片段
<fragment
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:id="@+id/mv_1"
    android:name="com.sunhillo.personneltrackerv002.FragmentMap"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_marginBottom="64dp"/>

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您应该使用启动模式Single Task或Single top,这将避免调用多个onCreate,您应该使用getApplicationContext()。