Вопрос:

LocalBroadcastManager, избыточные действия, жизненный цикл активности

java android

56 просмотра

1 ответ

403 Репутация автора

У меня большое приложение, первое действие - MainActivity, второе - LoginActivity (по разным причинам это может быть фрагмент или фрагмент DialogFragment)

LoginActivity инициализируется MainActivity, в обычном потоке приложению необходимо перезагрузить заголовок в NavigationDrawer. У меня уже есть такая функция в MainActivity.

private void loadUser () {
   //Reload header
}

Внутри LoginActivity у меня есть LocalBroadcastManager, как и следующий

Intent intent = new Intent ("RELOAD_MENU");
LocalBroadcastManager.getInstance(c).sendBroadcast(intent);

Внутри MainActivity у меня получатель

 private BroadcastReceiver loginReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        loadUser();
    }
};

onPause и onResume для MainActivity

@Override
protected void onResume() {
    super.onResume();
LocalBroadcastManager.getInstance(this).registerReceiver(loginReceiver,
            new IntentFilter("RELOAD_MENU"));
}


@Override
protected void onPause() {
    //LocalBroadcastManager onPause
    super.onPause();
       LocalBroadcastManager.getInstance(this).unregisterReceiver(loginReceiver);
}

Я что-то пропустил?

Существует проблема с действием A, инициализирующим действие B, а затем с помощью действия B запускается локальная широковещательная передача, которую должно услышать действие A?

Я также делаю некоторый тест с onDestroy только для тестирования, я не получаю LocalBroadcast.

Автор: Dinorah Tovar Источник Размещён: 22.08.2016 09:37

Ответы (1)


1 плюс

6103 Репутация автора

Решение

Проблема заключается в том, что вы регистрацию ресивера в MainActivity«S onPause ()метода.

Вы , вероятно , хотите зарегистрировать приемник в onCreate()и отмену регистрации в onDestroy()противном случае , если вы звоните LocalBroadcastManager.getInstance(c).sendBroadcast(intent);в LoginActivity, нет , зарегистрированных слушателей , LocalBroadcastManagerпотому что MainActivityприостановлен, LoginActivityотображаются на экране.

Автор: Mike Laren Размещён: 22.08.2016 09:57
Вопросы из категории :
32x32