0

私の見解は行動をregisterReceiver伴うACTION_TIME_TICKものですが、どこで登録を解除すべきかわかりません。

これをしないと漏れます。

関連するコードを次に示します。

public class TimeIndicator extends ViewSwitcher {

    private void build(final Context context) {

        this.addView(View.inflate(context, R.layout.time_indicator, null));

        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_TIME_TICK);
        context.registerReceiver(this.receiver, filter);
    }

    public final BroadcastReceiver receiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            Log.i("onReceive", intent.getAction());
        }
    };
}

自分のビューでReceiverをどこで登録解除する必要がありますか?

4

2 に答える 2

3
@Override
protected void onDetachedFromWindow() {
    super.onDetachedFromWindow();
    //add your code.
    getContext().unregisterReceiver(mReceiver);
};
于 2015-07-21T08:08:50.973 に答える
0

これは良い動作ではありません。ビューはコンテキストを表していません (明確なライフサイクルがなく、ライフサイクル コールバック メソッド -onPause、onCreate .... - がありません)。

したがって、ビューが属する最初の親コンテキスト オブジェクトでレシーバーを再取得する必要があります。アクティビティのフラグメントである場合。

onCreate()次に、親の : でレシーバーを登録できます。更新を受け取りたくない場合や、onStop()

于 2013-02-25T09:23:57.993 に答える