Обнаружить текущую активность переднего плана и перезагрузить ее

Моя проблема: в MainActivity я начинаю загружать некоторые данные из Интернета через XML Parser. Эти данные отображаются на каждом экране моего приложения. Это как база данных.

При загрузке и сохранении данных пользователь приложения может перемещаться по приложению «отверстие». Если загрузка и сохранение данных завершены, Я хочу обнаружить и перезагрузить текущее активное действие. Мне нужно сделать это, чтобы отобразить новые данные.

Я могу обнаружить текущую активность с помощью ActivityManager и могу запустить ее с помощью ComponentName с помощью метода «startActivity(Intent.makeMainActivity(componentName)». Но тогда старая активность также присутствует, когда я возвращаюсь назад с помощью ActionBar-BackButton. Я делаю это в методе AsyncTasks onPostExecute-Method после загрузки данных.

Любые идеи, как это сделать?

protected void onPostExecute(MainActivity.UrlParams result) {
    Toast.makeText(result.contextMain, "Daten wurden erfolgreich aktualisiert!", Toast.LENGTH_LONG).show();
    //Aktualisiert aktive Activity damit die neuen Daten angezeigt werden!
    ActivityManager am = (ActivityManager) result.contextMain.getSystemService(ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
    Log.d("topActivity", "CURRENT Activity ::" + taskInfo.get(0).topActivity.getClassName());
    ComponentName componentInfo = taskInfo.get(0).topActivity;
    componentInfo.getPackageName();
    Intent intent = Intent.makeMainActivity(componentInfo);
    result.contextMain.startActivity(intent);

    //myApp.getCurrentActivity().set
}

person Goetti    schedule 04.01.2017    source источник


Ответы (1)


  1. Загрузите ваши данные в службу, а не в AsyncTask
  2. Зарегистрируйте BroadcastReceiver в своем MainActivity в onStart() и отмените регистрацию в onStop(). Обновите свой вид в этом приемнике
  3. Когда данные загружены, сделайте широковещательную рассылку, чтобы вызвать активность, эти данные готовы. Недостатком этого метода является то, что вы должны где-то сохранять свои данные. Вы можете, конечно, передать данные в намерении, но только если данные малы
person Tomasz Czura    schedule 04.01.2017
comment
Существует библиотека под названием EventBus, которая делает это за вас, и это здорово. Если вы не хотите использовать библиотеку, то, что предложил Томаш, является лучшим подходом. - person danypata; 04.01.2017
comment
Спасибо, а есть ли более простой способ сделать это? - person Goetti; 04.01.2017
comment
Как упоминал danypata, вы можете использовать библиотеку EventBus. Я думаю, что это самый простой, приятный метод, без всякого взлома и затенения кода. - person Tomasz Czura; 04.01.2017
comment
Я немного прочитал о том, как начать работу, и о режимах, я думаю, что режим ASYNK мне подходит. Я надеюсь, что это так же просто, как это выглядит - person Goetti; 04.01.2017
comment
@danypata Я создал класс MessageEvent. В onPostExecute я публикую перезагрузку eventMessage, а в действии я зарегистрировал и отменил регистрацию в onStart / onStop, но метод onEventAsync не вызывается ... что мне делать? - person Goetti; 04.01.2017
comment
ГОТОВО, я неправильно понял @Subscriber ThreadMode -> Мне нужен ГЛАВНЫЙ. --- Знайте, что он воссоздает действие, и отображаются новые данные, а стек действий не обрабатывается --- СПАСИБО - person Goetti; 04.01.2017