0

我正在尝试优化我的 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();
}

我可以用这种方式注册我的接收器吗?

到目前为止,它似乎正在工作,但我不确定这是否只是运气,或者这是否可以保证始终有效。

4

1 回答 1

0

这样做绝对没问题:

public void registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
synchronized (mReceivers) {
    ReceiverRecord entry = new ReceiverRecord(filter, receiver);
...

LocalBroadcastManager.registerReceiver()是线程安全的,并且LocalBroadcastManager总是在 UI 线程上传递消息(就像任何广播接收器一样)。唯一需要注意的是注销监听器的管理。

于 2016-07-28T18:28:06.340 回答