我已经设置了一个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()方法为我清理了吗?
答案 0 :(得分:1)
您必须取消注册接收器,因为它与活动没有关系。正如你在source中看到的那样,终点不知道你注册的接收器,所以没有什么可以真正实现自动化。
为了对此进行扩展,正如您在LocalBroadcastManager source中看到的那样,传递给getInstance()
的应用程序上下文实际上并未用于任何内容,它是使用的应用程序上下文。因此,LocalBroadcastManager对您的Activity没有任何类型的引用来了解它的生命周期。