2013-02-25 59 views
0

我認爲必須registerReceiverACTION_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()); 
     } 
    }; 
} 

我應該在哪裏,我自己的看法unregisterReceiver?

+0

要註冊的onResume,並在註銷的onPause它。 – PPD 2013-02-25 08:52:19

回答

0

這不是一個好的行爲,您的視圖並不代表上下文(沒有明確的生命週期,也沒有生命週期的回調方法-onPause,onCreate ....-)

因此,你應該做的是在你的視圖所屬的第一個父上下文對象處將接收器加以推理。如果它是一個活動的片段。

然後,您可以在父母的onCreate()處註冊接收者。 並刪除它時,你不想接收更新了或onStop()

+0

我會說不要onCreate()方法,而應該使用onStart()方法。 – Prizoff 2017-04-18 22:48:51

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

不起作用。引發一些例外 – 2017-04-10 06:41:48

相關問題