Ich habe meine eigene Implementierung von Application.ActivityLifecycleCallbacks
. Ich verwende SherlockActivity
, aber für normale Aktivität Klasse könnte funktionieren.
Zuerst Ich erstelle eine Schnittstelle, die alle Methoden für den Lebenszyklus Aktivitäten verfolgen:
public interface ActivityLifecycleCallbacks{
public void onActivityStopped(Activity activity);
public void onActivityStarted(Activity activity);
public void onActivitySaveInstanceState(Activity activity, Bundle outState);
public void onActivityResumed(Activity activity);
public void onActivityPaused(Activity activity);
public void onActivityDestroyed(Activity activity);
public void onActivityCreated(Activity activity, Bundle savedInstanceState);
}
Zweitens implementiert ich diese Schnittstelle in der Klasse meiner Anwendung:
public class MyApplication extends Application implements my.package.ActivityLifecycleCallbacks{
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onActivityStopped(Activity activity) {
Log.i("Tracking Activity Stopped", activity.getLocalClassName());
}
@Override
public void onActivityStarted(Activity activity) {
Log.i("Tracking Activity Started", activity.getLocalClassName());
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
Log.i("Tracking Activity SaveInstanceState", activity.getLocalClassName());
}
@Override
public void onActivityResumed(Activity activity) {
Log.i("Tracking Activity Resumed", activity.getLocalClassName());
}
@Override
public void onActivityPaused(Activity activity) {
Log.i("Tracking Activity Paused", activity.getLocalClassName());
}
@Override
public void onActivityDestroyed(Activity activity) {
Log.i("Tracking Activity Destroyed", activity.getLocalClassName());
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
Log.i("Tracking Activity Created", activity.getLocalClassName());
}
}
Drittens I bin eine Klasse, die sich von SherlockActivity erstreckt:
public class MySherlockActivity extends SherlockActivity {
protected MyApplication nMyApplication;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
nMyApplication = (MyApplication) getApplication();
nMyApplication.onActivityCreated(this, savedInstanceState);
}
protected void onResume() {
// TODO Auto-generated method stub
nMyApplication.onActivityResumed(this);
super.onResume();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
nMyApplication.onActivityPaused(this);
super.onPause();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
nMyApplication.onActivityDestroyed(this);
super.onDestroy();
}
@Override
protected void onStart() {
nMyApplication.onActivityStarted(this);
super.onStart();
}
@Override
protected void onStop() {
nMyApplication.onActivityStopped(this);
super.onStop();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
nMyApplication.onActivitySaveInstanceState(this, outState);
super.onSaveInstanceState(outState);
}
}
Viertens, alle Klasse tha t von SherlockActivity zu verlängern, die ich für MySherlockActivity ersetzt:
public class MainActivity extends MySherlockActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Jetzt, in der logcat sehen Sie die programmierten Protokolle in der Interface-Implementierung in MyApplication gemacht.
UPDATE
Diese Implementierung von API Stufe 9 (Lebkuchen), API Stufe 12 (Honeycomb) und API-Stufe 17 (Jelly Bean) und funktioniert gut getestet wurde. Könnte in älteren Android-Versionen funktionieren.
UPDATE: Die Standard-API ist nun schon lange Genug, dass @ ClarkXP's Roll-your-own für die meisten Apps übertrieben ist. Sehen Sie stattdessen @ Jeroen's Antwort. Ich fasse zusammen: "In Ihrer Callback-Klasse (die' Application.ActivityLifecycleCallbacks' implementiert hat), führen Sie in ihrem Konstruktor 'getApplication(). RegisterActivityLifecycleCallbacks (this);' Wenn Ihre Klasse ein 'onCreate' oder' init' oder hat ähnliche Methode, die ausgeführt wird, wenn die Instanz aktiv wird, setzen Sie diese Zeile lieber dort als im Konstruktor (weil die Klasse vermutlich keine Rückrufe empfangen soll, bis sie vollständig fertig ist). " – ToolmakerSteve