Итак, я провел некоторое исследование своего кода, связанного с ошибкой (называемой фиксацией в onPostExecute асинхронной задачи, иногда выдает исключение IllegalStateException), и я обнаружил, что когда запускаю свою асинхронную задачу из своего фрагмента и показываю прогресс диалоговое окно, моя активность вызывает его метод onPause, который каскадно переходит к соответствующему onPause в моем фрагменте. Я просмотрел API и здесь, но не нашел ответов. Почему onPause в моей деятельности называется? Деятельность не обязательно переходит в фоновый режим, не так ли?
ProgressDialog во фрагменте запускает метод onPause активности хоста.
Ответы (1)
Когда ваша активность переходит в фоновый режим, вызывается метод onStop()
. Однако, когда вы показываете диалоговое окно, действие не отображается в верхней части вашего представления, поэтому вызывается метод onPause()
.
Если у вас есть что-то, что вы хотите сделать в своем методе onPause()
, что не должно выполняться, когда вы хотите показать свой диалог, вам нужно установить флаг и выполнять этот код только в том случае, если флаг истинен:
@Overrides
public void onPause() {
super.onPause();
if (myFlag) {
myMethod();
}
}
Вы переключаете свой флаг, когда показываете свой диалог и когда закрываете его.
person
DDsix
schedule
15.05.2014
Как насчет того, чтобы я хотел сделать что-то до onResume. Как я уже упоминал, я получаю исключение IllegalStateException из-за попытки зафиксировать транзакцию Fragment в onPostExecute моей AsyncTask. Есть ли разумный способ отложить фиксацию до onResume?
- person user1371391; 15.05.2014