2016-06-23 26 views
1

起動時に問題(クラッシュ)が発生したAndroid用のアプリケーションを書いた。(再起動後5秒以内) 1つの理由または別の理由により、OnCreateメソッドが2回呼び出されます。これが問題だったかもしれないと思っていましたが、これを調べた後、アンドロイドシステムは起動後に「MCM」を取得するなどのシステムサービスを開始していることを思い出します。AndroidのonCreateが電話の再起動後に2回呼び出され、フラグメントの停止が行われる

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

フラグメントのどの方法でパーミッションチェックをしていますか? – jaibatrik

+0

@jaibatrikこれは私のcompareLocationsメソッド内にあります。この方法では、マップカメラの位置と地図上の現在のユーザーの位置を比較します。私は他にも小切手を持っていますが、これは最初に呼ばれたものです。誤っていない場合は、(このアプリケーションの目的で)ロケーションマネージャを作成する前にまだ権限があることを確認する必要があります。私は、ユーザーにマップを再センタリングする目的で、フラグメント内にロケーションマネージャを作成します... – traintrax8

答えて

0

ロケーション権限にアクセスすることを究極の目的とする場合は、これらの権限をマニフェストファイルに追加するだけです。また、javaを介してこのチェックを実行する場合は、これを個々のフラグメントに追加しないでください。この構文は、フラグメントを参照するMainActivity Javaファイルにのみ追加してください。私はこれが役立つことを願っています:)

0

複数のonCreateを呼び出さないように、起動モードのシングルタスクまたはシングルトップを使用し、getApplicationContext()を使用する必要があります。

関連する問題