Android правильное место для инициализации LocalBroadcastReceiver для действия - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть android действие с BroadcastReceiver, как показано ниже.

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, intentFilter);
}

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
          Log.i("TAG", intent.getAction());
        }
};

Проблема в том, что я получаю сообщение из сети и в зависимости от типа сообщения я создаю действие или отправляю сообщение Broadcast в действие, так как я получаю сообщение очень быстро, тип сообщения для создания действия прибывает непосредственно перед (в течение нескольких миллисекунд) типом сообщения, чтобы отправить широковещательное сообщение той же операции, и я получаю ошибку handleWindowVisibility: no activity for token android.os.BinderProxy, исследуя немного, я обнаружил, что действие может не быть создан правильно, прежде чем я отправлю широковещательный намерение Поэтому я заставил поток спать в течение 3 секунд.

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

Теперь все работает, как и ожидалось, но вышеприведенное выглядит некрасиво и немного хаки sh, есть ли лучший способ отправить намерение трансляции прямо перед действием создание

1 Ответ

0 голосов
/ 08 мая 2020

Вместо создания Activity и отправки ему Intent трансляции, просто поместите содержимое трансляции Intent в Intent, который вы используете для запуска Activity (как «дополнительный») , Тогда вам не нужна 3-секундная задержка, вы просто отправляете трансляцию Intent, если Activity уже запущен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...