我正在尝试优化我的android应用程序,并决定将我在onStart
方法中注册的所有接收器转移到在onStart
方法中启动的线程。这是代码:
@Override
public void onStart() {
Timber.e( "onStart");
super.onStart();
Thread thread = new Thread() {
@Override
public void run() {
super.run();
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(locationReceiver,
new IntentFilter(Constants.MAIN_ACTIVITY_LOCATION));
}
};
thread.start();
}
我可以用这种方式注册我的接收器吗?
到目前为止,它似乎是有效的,但我不确定这是运气好,还是能保证一直有效。
这绝对可以做到:
public void registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
synchronized (mReceivers) {
ReceiverRecord entry = new ReceiverRecord(filter, receiver);
...
LocalBroadcastManager.registerReceiver()
是线程安全的,LocalBroadcastManager
总是在UI线程上传递消息(就像任何广播接收器一样)。唯一需要注意的是注销侦听器的管理。