Ответ 1
После этого следует поместить инструкцию return
finish
, потому что метод, который называется finish
, будет выполнен в противном случае.
также см. этот вопрос: о финише() в 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()
выйдет из этой операции. Разве это не так? Где я могу узнать дополнительную информацию об этом методе?
После этого следует поместить инструкцию return
finish
, потому что метод, который называется finish
, будет выполнен в противном случае.
также см. этот вопрос: о финише() в android
finish() просто сообщает активности делать то, что нужно для завершения, например. выключение, вызов onPause, результат отчета для родителя и т.д. Он не выполняет вызов exit() или что-то еще.
Вы должны вернуться после вызова finish().
Добавляя к другим ответам, вы еще можете иметь (Re)onStart
, onResume
и onPause
.
Я говорю это, потому что в следующей ссылке есть таблица, в которой говорится, что для одного действия, которое нужно убить, сначала он вызывается onPause (и, возможно, но не гарантируется) в Stop и onDestroy.
Ссылка Activity
Finish завершает работу, но до основного цикла выполняется любое взаимодействие с пользовательским интерфейсом. Вам нужно подождать, пока не заработает цикл UI, который после возврата из onCreate
.
В этом случае должен использоваться оператор 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();
}
}
указать в декларации:
<activity
android:name=".MainActivity"
android:noHistory="true" />
чтобы не держать его в стеке истории системы