Android:在非UI线程中动态注册我的接收器



我正在尝试优化我的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线程上传递消息(就像任何广播接收器一样)。唯一需要注意的是注销侦听器的管理。

最新更新