Mithilfe dieser Informationen können Sie ermitteln, wie Abstürze verfolgt werden und wie Sie am besten mit fälschlich gemeldeten Abstürzen umgehen.
App-Abstürze werden als Teil der Lebenszyklusmetriken verfolgt. Bevor Sie Abstürze verfolgen können, fügen Sie die Bibliothek zu Ihrem Projekt hinzu und implementieren Sie den Lebenszyklus. Weitere Informationen finden Sie unter SDK und Konfigurationsdatei zu Ihrem IntelliJ IDEA- oder Eclipse-Projekt hinzufügen in Grundlegende Implementierung und Lebenszyklus.
Wenn die Lebenszyklusmetriken implementiert sind, wird Config.collectLifecycleData
in der Methode OnResume
jeder Aktivität aufgerufen. In der Methode onPause
wird Config.pauseCollectingLifeCycleData
aufgerufen.
In pauseCollectingLifeCycleData
wird eine Markierung gesetzt, um die ordnungsgemäße Beendigung anzuzeigen. Wenn die App erneut gestartet oder wieder aufgenommen wird, überprüft collectLifecycleData
diese Markierung. Wenn die App laut Flag-Status nicht ordnungsgemäß beendet wurde, werden mit dem nächsten Aufruf a.CrashEvent
-Kontextdaten gesendet und es wird ein Absturzereignis gemeldet.
Um präzise Absturzberichte zu gewährleisten, müssen Sie pauseCollectingLifeCycleData
in der Methode onPause
jeder Aktivität aufrufen. Um zu verstehen, warum dies wichtig ist, sehen Sie hier den Android-Aktivitätslebenszyklus:
Weitere Informationen zum Android-Aktivitätslebenszyklus finden Sie unter Aktivitäten.
Diese Darstellung des Android-Lebenszyklus wurde vom Android Open Source Project erstellt und veröffentlicht und wird gemäß Creative Commons 2.5 Attribution License verwendet.
Wenn Sie mit einer IDE debuggen, z. B. mit Android Studio, und die App von der IDE aus erneut startet, während sich die App im Vordergrund befindet, führt dies zu einem Absturz.
Sie können solche Abstürze vermeiden, indem Sie die App im Hintergrund ausführen, bevor Sie sie erneut über die IDE starten.
Wenn die letzte Vordergrundaktivität Ihrer App in den Hintergrund versetzt wird, Config.pauseCollectingLifecycleData();
in onPause
nicht aufgerufen wird und Ihre App manuell geschlossen oder vom Betriebssystem beendet wird, kommt es beim nächsten Start zu einem Absturz.
Fragmente verfügen über App-Lebenszyklusereignisse, die Aktivitäten ähnlich sind. Ein Fragment kann jedoch nicht aktiv sein, ohne mit einer Aktivität verbunden zu sein.
Sie müssen sich auf die Lebenszyklusereignisse verlassen, mit denen die enthaltenen Aktivitäten Ihren Code ausführen können. Dies erfolgt über die übergeordnete Ansicht des Fragments.
Seit API-Version 14 erlaubt Android globale Lebenszyklus-Rückrufe für Aktivitäten. Weitere Informationen dazu finden Sie unter Application.
Sie können diese Rückrufe verwenden, um sicherzustellen, dass alle Aktivitäten collectLifecycleData()
und pauseCollectingLifecycleData()
ordnungsgemäß aufrufen. Sie benötigen diesen Code nur in Ihrer Hauptaktivität und anderen Aktivitäten, in der Ihre App möglicherweise gestartet wird:
import com.adobe.mobile.Config;
public class MainActivity extends Activity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getApplication().registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityResumed(Activity activity) {
Config.setContext(activity.getApplicationContext());
Config.collectLifecycleData(activity);
}
@Override
public void onActivityPaused(Activity activity) {
Config.pauseCollectingLifecycleData();
}
// the following methods aren't needed for our lifecycle purposes, but are required to be implemented
// by the ActivityLifecycleCallbacks object
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}
@Override
public void onActivityStarted(Activity activity) {}
@Override
public void onActivityStopped(Activity activity) {}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}
@Override
public void onActivityDestroyed(Activity activity) {}
});
}
...
}
Um mithilfe von Config.collectLifecycleData(Activity activity
, Map<String
, Object> contextData)
zusätzliche Kontextdaten mit Ihrem Lebenszyklusaufruf zu senden, müssen Sie die Methode onResume
für diese Aktivität überschreiben und sicherstellen, dass Sie super.onResume()
aufrufen, nachdem Sie manuell collectLifecycleData
aufgerufen haben.
@Override
protected void onResume() {
HashMap<String, Object> cdata = new HashMap<>();
cdata.put("someKey", "someValue");
Config.collectLifecycleData(this, cdata);
super.onResume();
}