Ich habe eine Anwendung für Android geschrieben, die ein Problem (Absturz) hat, wenn es gestartet wird sofort (mit in 5 Sekunden oder so) nach dem Telefon neu gestartet wird. Aus dem einen oder anderen Grund wird die OnCreate-Methode ein zweites Mal aufgerufen. Ich dachte, dies könnte das Problem gewesen sein, aber nachdem ich dies untersucht habe, habe ich herausgefunden, dass das Android-System nach dem Start onCreate aufrufen kann, da es immer noch Systemdienste startet - wie zum Beispiel das "MCM".Android onCreate zweimal nach dem Telefonneustart aufgerufen, macht Fragment aufhören zu arbeiten
In meiner Anwendung in der MainActivity habe ich ein statisch gebundenes Fragment, das durch XML gebunden ist. Das Fragment hat Code in ihm, das überprüft, ob Standort Berechtigung erteilt wurden:
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)
Das Problem ist, this.getContext() gibt null! Es hat definitiv etwas damit zu tun, dass onCreate mehr als einmal aufgerufen wird, denn wenn das Telefon nicht bootet und onCreate nur aufgerufen wird, funktioniert die Anwendung einwandfrei!
Hier ist der einzige Hinweis, den ich in meiner onCreate Methode in dem mainActivity an das Fragment machen:
android.support.v4.app.Fragment fragMap = getSupportFragmentManager().findFragmentById(R.id.mv_1);
if (fragMap instanceof FragmentMap)
{
theMap = (FragmentMap) fragMap;
}
Hier wird das Fragment durch XML gebunden:
<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"/>
Danke sehr für jede Hilfe, die Sie zur Verfügung stellen können! Ich bin noch neu in der Android-Programmierung, und versuche, die Details zu lernen!
In welcher Methode des Fragments haben Sie die Berechtigungsprüfung? – jaibatrik
@jaibatrik Es ist in meiner compareLocations-Methode. Diese Methode vergleicht den Standort der Maps-Kamera mit dem aktuellen Standort des Benutzers auf der Karte. Ich habe auch anderswo Schecks, aber das ist der erste Name. Wenn ich mich nicht irre, muss überprüft werden, ob Sie noch über Berechtigungen verfügen, bevor Sie einen Standortmanager erstellen (für den Zweck dieser Anwendung). Ich erstelle einen Location Manager im Fragment, um die Map für den Benutzer neu zu zentrieren ... – traintrax8