在Android活动上调用finish()实际上并没有完成

时间:2011-02-07 17:01:36

标签: 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()会退出活动。这不是这种情况吗?我在哪里可以找到有关此方法的更多信息?

6 个答案:

答案 0 :(得分:72)

您应该在return之后添加finish语句,因为调用finish的方法将完全执行。

另请参阅此问题:about finish() in android

答案 1 :(得分:6)

finish()只是告诉活动做它需要做的事情来完成,例如。关闭,调用onPause,将结果报告给父级等。它不会执行exit()调用或其他任何操作。

你应该在完成()之后回来。

答案 2 :(得分:4)

添加其他答案,您仍然可能调用(Re)onStartonResumeonPause

我之所以这样说是因为在下面的链接中,有一个表格表示对于一个要杀死的活动,首先在Stop和onDestroy上调用onPause(可能但不保证)。

参考Activity

答案 3 :(得分:0)

Finish完成活动,但是由主循环完成任何UI交互。您必须等到UI循环运行,即从onCreate返回后。

答案 4 :(得分:0)

应该使用PHP语句。

try...catch

答案 5 :(得分:0)

放入清单:

    <activity android:name=".MainActivity"
        android:noHistory="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

避免将其保存在系统的历史记录堆栈中