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());
        }
    };
}

在我自己看来,我应该在哪里取消注册接收器?

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 回答