【问题标题】:Android onCreate called twice after phone reboot, makes fragment stop working手机重启后Android onCreate调用了两次,使片段停止工作
【发布时间】:2016-06-23 18:34:44
【问题描述】:

我为 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!

这是我在 ma​​inActivity 的 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 编程还是很陌生,并且正在尝试学习细节!

【问题讨论】:

  • 在Fragment的哪个方法中进行权限检查?
  • @jaibatrik 它在我的 compareLocations 方法中。此方法将地图相机的位置与用户在地图上的当前位置进行比较。我在其他地方也有支票,但这是第一次打电话。如果我没记错的话,有必要在创建位置管理器之前检查您是否仍有权限(出于此应用程序的目的)。我在片段中创建了一个位置管理器,以便将地图重新​​定位到用户...

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多