У меня было занятие А, которое раньше:
private void launchActivityBAndFinish() {
Intent activityB = makeActivityBIntent();
startActivity(activityB);
finish();
}
Это было нехорошо, потому что ActivityB потребуется некоторое время для запуска (он также потенциально находится в другом процессе или даже в другом приложении). Итак, как написано, это оставит визуальный разрыв между немедленным уходом ActivityA и запуском ActivityB. Желаемое поведение - продолжать показывать ActivityA (загрузочный счетчик) до тех пор, пока ActivityB не станет видимым.
Поэтому я изменил его, чтобы добавить android:noHistory в манифест ActivityA и удалить вызов finish(). Он работал, как задумано (ActivityB плавно отображается поверх ActivityA, а последний исчез из истории). ЗА ИСКЛЮЧЕНИЕМ на самом деле не работает, когда ActivityB закрывается достаточно быстро сразу после запуска (через [X] в полностью видимом пользовательском интерфейсе ActivityB, который вызывает finish()).
Итак, мои вопросы:
1) Когда android:noHistory срабатывает точно по триггеру ()? Документы сообщает, что ActivityA больше не отображается, но это не похоже на описанное исключение.
2) Как правильно достичь желаемого поведения пользовательского интерфейса, о котором я говорю?
Спасибо!
ActivityB находится в другом процессе и, возможно, в другом приложении, поэтому для его запуска требуется время. Он также выполняет дисковый ввод-вывод, поэтому для рисования содержимого потребуется время. Следовательно, я ищу способы подождать, пока он не появится, а затем закрыть ActivityA (ActivityB находится вне моего контроля).
В этом случае Activity была полупрозрачной, следовательно, android: noHistory не завершал работу Activity.
Что вы делаете перед вызовом метода
setContentViewв ActivityB? Я думаю, вы делаете что-то, что требует много времени, прежде чем рисовать макет.