我已经编写了一个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编程的新手,我正在尝试学习这些细节!
答案 0 :(得分:0)
如果您的最终目标是访问位置权限,只需在清单文件中添加这些权限即可。如果您希望通过java执行此检查,请不要将其添加到单个片段。仅将此语法添加到引用片段的MainActivity java文件中。我希望这有帮助。 :)
答案 1 :(得分:0)
您应该使用启动模式Single Task或Single top,这将避免调用多个onCreate,您应该使用getApplicationContext()。