我应该在自己的视图中取消注册地点?

时间:2013-02-25 08:42:24

标签: android broadcastreceiver android-custom-view

我的观点必须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());
        }
    };
}

我应该在自己的视野中取消注册收件人?

2 个答案:

答案 0 :(得分:3)

@Override
protected void onDetachedFromWindow() {
    super.onDetachedFromWindow();
    //add your code.
    getContext().unregisterReceiver(mReceiver);
};

答案 1 :(得分:0)

这不是一个好的行为,你的观点不代表一个上下文(没有明确的生命周期,也没有生命周期的回调方法-onPause,onCreate ....--)

所以你应该做的就是在你的视图所属的第一个父上下文对象中使用接收器。如果它是一个活动的片段。

然后你可以在父母的onCreate()注册接收者。 如果您不想再接收更新或在onStop()

中删除它