Подтвердить что ты не робот

Вызов завершения() в активности Android фактически не заканчивается

Я звоню finish(), но моя активность продолжается.

У меня есть действие, которое вызывается меню из основного экрана активности. В моей работе onCreate() у меня есть следующий фрагмент кода:

    // Make sure there are some events in the list.
    if (theEventArrayList.isEmpty()){
        Toast.makeText(this, "Event List is empty", Toast.LENGTH_LONG).show();
        finish();
    }
    SummarizeCurrentEvent();
    graphEvents();

Если список пуст, он помещает Toast, и я могу установить точку останова при вызове finish(). Если я отступлю от этого в отладчике, он переходит к SummarizeCurrentEvent(). Я думал, что finish() выйдет из этой операции. Разве это не так? Где я могу узнать дополнительную информацию об этом методе?

4b9b3361

Ответ 1

После этого следует поместить инструкцию return finish, потому что метод, который называется finish, будет выполнен в противном случае.

также см. этот вопрос: о финише() в android

Ответ 2

finish() просто сообщает активности делать то, что нужно для завершения, например. выключение, вызов onPause, результат отчета для родителя и т.д. Он не выполняет вызов exit() или что-то еще.

Вы должны вернуться после вызова finish().

Ответ 3

Добавляя к другим ответам, вы еще можете иметь (Re)onStart, onResume и onPause.

Я говорю это, потому что в следующей ссылке есть таблица, в которой говорится, что для одного действия, которое нужно убить, сначала он вызывается onPause (и, возможно, но не гарантируется) в Stop и onDestroy.

Ссылка Activity

Ответ 4

Finish завершает работу, но до основного цикла выполняется любое взаимодействие с пользовательским интерфейсом. Вам нужно подождать, пока не заработает цикл UI, который после возврата из onCreate.

Ответ 5

В этом случае должен использоваться оператор try...catch.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    try {
        //...some initialization...

        // Make sure there are some events in the list.
        if (theEventArrayList.isEmpty()){
            throw new Exception("Event List is empty");
        }
        SummarizeCurrentEvent();
        graphEvents();
    } catch (Exception e) {
        Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
        finish();
    }
}

Ответ 6

указать в декларации:

<activity
android:name=".MainActivity"
android:noHistory="true" />

чтобы не держать его в стеке истории системы