3

アクティビティのイベントに登録する方法はありますか?私は特にonStart/onStopイベントに興味があり、そのためのアクティビティに特別な操作を追加したくありません。

4

1 に答える 1

4

他のアクティビティのライフサイクルからイベントを取得する 1 つの方法は、クラスを としてApplication.ActivityLifecycleCallbacksメイン インスタンスに登録し、関心Applicationのある のイベントをフィルター処理することです。Activity

これは短い例です (別のメソッド/クラスからのコールバックを登録したい場合がMainActivity.onCreateあります。そうしないと、そのメッセージを見逃すことになります;) そして、望ましくない依存関係がそこにある可能性があります)

スパイしたいアクティビティで:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Register a spy for this activity
        getApplication().registerActivityLifecycleCallbacks(new ActivitySpy(this));
    }
}

次に、Spy コードは次のようになります。

public class ActivitySpy implements ActivityLifecycleCallbacks {

    private final Activity mActivity;

    public ActivitySpy(Activity activity) {
        mActivity = activity;
    }

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
        if (mActivity == activity)
            Log.i("SPY", "Activity Created");
    }

    @Override
    public void onActivityDestroyed(Activity activity) {
        if (mActivity == activity)
            Log.i("SPY", "Activity Destroyed");
    }

    // (...) Other overrides

}

フォローしたいアクティビティへの参照がある場合は、別の場所からスパイを登録することもできます。

これが役立つことを願っています:)

編集:言い忘れましたが、これはAPI レベル 14 以上でのみ機能します...

于 2012-09-29T13:18:28.257 に答える