【问题标题】:finish() and android activity lifecyclefinish() 和 android 活动生命周期
【发布时间】:2015-10-15 15:40:48
【问题描述】:

关于 android Activity 生命周期有一些我不知道的事情,不要让我开始讨论 Fragments!:

一旦调用了像 resume() 这样的方法,如果调用了 finish() 或 startActivity(new Intent(..)),它将继续执行到最后。

 public void onResume(){

      // do some stuff AAA
       ....

      startActivity(new Intent(..));

     // do some more stuff BBBB

      // Do I get this far?

      setResult(RESULT_CODE, intent);


     finish();


     // How about here? Do I get this far?  

    // how do I make sure that everything started in this app up to now is finished off as well? ie that activities started up by this activity are also finished?

}

顺便说一句,这类似于顶级面试问题。在完成()之后还会调用 onPause()吗? onStop() 怎么样?

最后,我想知道如何finish() 不仅是MainActivity,而是在应用程序下启动的所有此类活动,即由MainActivivity 启动,从而回到最初调用我的应用程序的应用程序。

【问题讨论】:

  • 不能自己试试吗?有什么问题吗?将日志放入这两种方法并查看结果。
  • 我想了解它的理论。我可以这样做,但是需要在不同版本的 Android 等上进行测试。我想了解为什么?您还看到关于完成应用程序下所有活动的部分吗?这就是我的目标,我刚刚意识到我对 Android 活动生命周期的了解还不够。例如,是的,我可以检查 onStop() 和 onPause() 是否仍然被调用,但我真的想知道为什么,否则我会忘记它。

标签: android


【解决方案1】:

是的,调用finish()之后的代码将被调用。

当您调用finish() 时,将执行的下一个函数是onPause()

如果您想关闭后台堆栈上的所有活动,请执行以下操作:

setResult(RESULT_CLOSE_ALL);
finish();

【讨论】:

  • 好的,我记得如果你在某个时候调用finish(),有些东西不会被调用。不确定,也许那是在 oncreate() 中完成的。
  • 好的,我也看到了:vv Intent intent = new Intent(ExitConfirmationActivity.this, FirstActivity.class);意图.setFlags(意图.FLAG_ACTIVITY_CLEAR_TOP);开始活动(意图);
  • 是的,很棒。这将开始一个新的活动来清除以前的活动。那么你只能调用finish()(没有setResult(RESULT_CLOSE_ALL)),因为如果你总是使用 Intent.FLAG_ACTIVITY_CLEAR_TOP 标志来启动新活动,那么你在后台堆栈上只有一个活动。
  • 但是,我想知道它是否还会清除调用我的应用的应用的活动?
  • 你这是什么意思?你是指你的主要活动吗?
猜你喜欢
  • 1970-01-01
  • 2012-09-21
  • 2013-01-13
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多