finish()取消注册广播接收器吗?

时间:2015-11-25 00:47:55

标签: android

我已经设置了一个BroadcastReceiver,作为一个活动阻止另一个活动的方式。我想要停止的活动看起来像这样:

public class TestActivity extends Activity {
    private static final String TAG = "TestActivity";
    private Context mContext = null;

    private final BroadcastReceiver mQuitReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals("finish_activity")) {
                mLogUtil.d(TAG, "onReceive() finishing...");
                finish();
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = this;
        mLogUtil.d(TAG, "onCreate()");
        LocalBroadcastManager.getInstance(mContext).registerReceiver(mQuitReceiver, new IntentFilter("finish_activity"));
        // Other initialization stuff...
    }

    @Override
    protected void onDestroy()
    {
        LocalBroadcastManager.getInstance(mContext).unregisterReceiver(mQuitReceiver);
        // Other de-initialization stuff...
        super.onDestroy();
    }
}

我通过以下方式完成了另一项活动:

Intent intent = new Intent("finish_activity");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

我的问题是,如果接收器绑定到活动实例,我是否真的需要手动取消注册该接收器?或者finish()方法为我清理了吗?

1 个答案:

答案 0 :(得分:1)

您必须取消注册接收器,因为它与活动没有关系。正如你在source中看到的那样,终点不知道你注册的接收器,所以没有什么可以真正实现自动化。

为了对此进行扩展,正如您在LocalBroadcastManager source中看到的那样,传递给getInstance()的应用程序上下文实际上并未用于任何内容,它是使用的应用程序上下文。因此,LocalBroadcastManager对您的Activity没有任何类型的引用来了解它的生命周期。