在Android活动上调用finish()实际上并没有完成
我打了finish(),但我的活动仍在继续。
我有一个活动,该活动由主活动屏幕上的菜单调用。 在我的活动的finish()方法中,我具有以下代码片段:
// 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()将退出活动。 不是这样吗? 在哪里可以找到有关此方法的更多信息?
Peter Nelson asked 2020-02-06T11:11:32Z
6个解决方案
75 votes
您应该在finish之后放置return语句,因为调用finish的方法将完全执行。
另外,请参见以下问题:关于android中的finish()
Nanne answered 2020-02-06T11:12:15Z
6 votes
finish()只是告诉活动要完成的工作,例如。 关闭,调用onPause,将结果报告给父级等。它不执行exit()调用或执行任何操作。
您应该在finish()调用之后返回。
Robby Pond answered 2020-02-06T11:12:39Z
4 votes
除了其他答案外,您可能还调用了(Re)onStart、onResume和onPause。
我之所以这样说,是因为在下面的链接中,有一个表说,要杀死一个活动,首先要在Stop和onDestroy上对其进行onPause(并且可能但不能保证)调用。
参考活动
Pedro Loureiro answered 2020-02-06T11:13:09Z
0 votes
Finish完成了该活动,但取决于UI进行任何UI交互的主循环。 从onCreate返回后,您必须等待直到UI循环运行。
Falmarri answered 2020-02-06T11:13:29Z
0 votes
在这种情况下,应使用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();
}
}
WJr answered 2020-02-06T11:13:49Z
0 votes
放入清单:
android:noHistory="true">
避免将其保存在系统的历史记录堆栈中
CodeToLife answered 2020-02-06T11:14:14Z