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 に答える