完成不停止活动代码执行

时间:2014-03-20 06:27:10

标签: android activity-finish

我尝试了以下代码

Log.d("t20", "First here");
startActivity(new Intent(this, AnotherActivity.class));     
finish();
Log.d("t20", "Then Here");

日志输出:

First here
Then Here

为什么要打印第二条日志消息? 执行应该在finsh()停止,对吗?

3 个答案:

答案 0 :(得分:6)

不,结束不是中止。该函数将继续,当它返回到运行事件循环的Android框架内的Looper时,它将开始取消初始化序列(调用onPause,onStop和onDestroy)。

答案 1 :(得分:4)

致电finish()后,您的活动将不会立即完成,但只是计划完成'。因此代码的执行将继续。要检查是否在Activity实例上调用了finish(),您可以调用Activity.isFinishing()方法。

来自docs:

Check to see whether this activity is in the process of finishing, either because you
called finish() on it or someone else has requested that it finished. 

所以你的代码示例如下所示:

Log.d("t20", "First here");
startActivity(new Intent(this, AnotherActivity.class));     
finish();
if (!isFinishing()) {
    Log.d("t20", "Then Here");
}

答案 2 :(得分:1)

在活动上调用finish()时,执行onDestroy()方法,此方法可以执行以下操作:

  1. 关闭活动管理的所有对话框。
  2. 关闭活动管理的所有游标。
  3. 关闭所有打开的搜索对话框
  4. 此外,onDestroy()不是析构函数。它实际上并没有破坏对象。它只是一种基于某种状态调用的方法。因此,在超类的onDestroy()运行并返回之后,你的实例仍然存活并且非常好*。如果用户想要重新启动应用程序,Android会保持进程,这会使启动阶段更快。该过程将不会执行任何操作,如果需要回收内存,则该过程将被终止