Application.ActivityLifecycleCallbacks
の独自の実装を行いました。 SherlockActivity
を使用していますが、通常のアクティビティクラスでは動作する可能性があります。活動のライフサイクルを追跡するために
まず、私はすべてのメソッドを持つインターフェイスを作成しています:私は、
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());
}
}
サード:
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);
}
第二に、私は自分のアプリケーションのクラスで、このインタフェースを実装しましたSherlockActivityから継承するクラスを作成しています:
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);
}
}
第4、すべてのクラスtha tはSherlockActivityから延びている、私はMySherlockActivityで交換:
public class MainActivity extends MySherlockActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
さて、logcatにあなたはMyApplicationをで行われたインタフェースの実装でプログラムのログが表示されます。
UPDATE
この実装は、APIレベル9(ジンジャーブレッド)、APIレベル12(ハニカム)とAPIレベル17(ジェリービーン)からテストされ、正常に動作しました。 Androidの古いバージョンで動作する可能性があります。
UPDATEを働くApplicationクラスに次の行を追加します。標準APIは現在約長くなっています@ ClarkXPのロールオーダーは大部分のアプリにとって過度のものです。代わりに@ Jeroenの答えを見てください。あなたのクラスが 'onCreate'または' init'を持っているか、または 'getCreate'()メソッドが呼び出されたときに' getApplication().ActivityLifecycleCallbacks(this)インスタンスがアクティブになったときに実行される同様のメソッドでは、コンストラクタではなく、その行を配置します(クラスは完全に準備が整うまでコールバックを受信したくないため)。 – ToolmakerSteve