Как безопасно завершить Activity в методе onResume ()? - PullRequest
5 голосов
/ 10 мая 2011

onResume () моей деятельности считывает некоторые «дополнительные» данные из намерения, которое его запустило, и соответствующим образом обновляет пользовательский интерфейс.

Я бы хотел добавить обработку ошибок: если данные в Intent отсутствуют / повреждены, действие отображает тост и завершается.

Могу ли я просто вызвать метод finish () в методе onResume ()? Я беспокоюсь о некоторых неожиданных вещах, учитывая, что оба они связаны с жизненным циклом.

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

Спасибо!

Ответы [ 3 ]

5 голосов
/ 10 мая 2011

Операция может безопасно завершиться, вызывая finish () в в любое время , не оказывая вредного воздействия.

Очевидно, что вы должны быть уверены, что сохранили все необходимые настройки / данные перед вызовом finish (), но это само собой разумеется и полностью ваша ответственность, основанная на вашем дизайне Activity.

1 голос
/ 10 мая 2011

Вызов finish() в onResume() должен быть в порядке. Но почему вы делаете обработку ошибок в onResume(), а не в onCreate()?

0 голосов
/ 28 апреля 2014

Я столкнулся с непредсказуемыми результатами при вызове finish() напрямую из onActivityResult(), onResume() или onPostResume(). Это было на Nexus 7 со стоковым Android 4.4.2.

Решение, которое я нашел, вызывало finish() позже, используя Runnable:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        Handler handler = new Handler();
        handler.post(new Runnable() {
            @Override
            public void run() {
                setResult(RESULT_OK);
                finish();
            }
        });
    }
}
...