【问题标题】:finish not stoping the activity code execution完成不停止活动代码执行
【发布时间】:2014-04-26 19:57:14
【问题描述】:

我尝试了以下代码

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

日志输出:

First here
Then Here

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

【问题讨论】:

    标签: android activity-finish


    【解决方案1】:

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

    来自文档:

    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】:

      当在一个activity上调用finish()时,onDestroy()方法会被执行,这个方法可以做如下事情:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 您可以添加任何参考吗?
        • 如何防止代码继续执行?
        • 从函数返回,以及所有调用函数。
        猜你喜欢
        • 2017-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多