Activity.finish()如何在Android中工作?


Answers:


123

它是立即退出还是完成了调用它的功能?

调用的方法finish()将运行完成。在finish()您将控制权返回给Android之前,该操作甚至不会开始。


3
然后,如何完成一项由StartAvtivityforResults()调用的活动而不完成?
Ayush Pateria '02

@CommonsWare如何确保始终调用onStop?在我的应用程序中,在某些情况下未调用OnStop和onDestroy,在这种情况下,子活动需要太多时间才能完成,并且看起来App已挂起……而在调用onStop时,一切正常。我在使用Android 2.3.6的Galaxy y上...在stackoverflow.com/questions/13928591/上看到我的问题……请帮助!!!
阿米特(Amit)

@CommonsWare我测试过的先生非常正确。为您+1但是我想问一个问题,我在函数中的第一条语句中写了finish(),然后它执行了整个函数,然后将finish()称为“如何管理”。
Nikhil Agrawal

@NikhilAgrawal,可以在调用finish()之后立即让函数返回。
antonio081014 2013年

在调用onDestroy()之前,finish()是否还会调用onPause()和onStop()吗?
sr09

20

每一个生命周期事件一样onCreateonResumeonPause... onDestroy的活动总是叫上一个单独的线程-在“主线程”。

简而言之,该线程由一个队列支持,所有活动事件都将被发布到该队列中。该线程可以按插入顺序执行所有这些事件。

如果您正在调用finish()生命周期回调之一,例如onCreate()...,则会在此队列中添加“完成”消息,但线程无法自由选择并执行“完成”操作,直到当前执行的方法返回为止,即从当前任务。


13

ondestroy() 是您的活动销毁之前收到的最后一个电话。

这可能是由于活动即将完成(有人对其进行调用)finish() ,或者是因为系统暂时销毁了该活动实例以节省空间。您可以使用isFinishing() 方法区分这两种情况。


1

如果有两个活动A和B。并且您的流程从A> B开始;和B = A电话finish()

然后,

finish()从中调用的方法将按Mark所述执行。回调流程将如下所示-

  1. onPause()activity A
  2. onRestart()> onStart()> onResume()活动B的
  3. 然后,才是真正的区别。如果你没有调用finish()activity A; 唯一onStop()Activity A将在这里调用。而在这种情况下,我们finish()从哪里打电话Activity A;因此onStop()onDestroy()两者都将被要求activity A
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.