Activity.finish()方法到底在做什么?

问题描述 投票:148回答:12

我正在开发Android应用程序一段时间,并关注了很多有关活动生命周期和应用程序生命周期的文章。

[我知道Activity.finish()方法调用到Activity.onDestroy()的某个位置,并且还从堆栈中删除了活动,我想它以某种方式指向了操作系统和垃圾收集器,他可以“尽其所能”并释放内存当它觉得是个好时机。...

我来到了这篇文章-Is quitting an application frowned upon?并阅读Mark Murphy的答案。

[这让我对finish()方法的实际作用有些困惑。

是否有机会我叫finish()而不会叫onDestroy()

android activity-lifecycle ondestroy application-lifecycle
12个回答
163
投票

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

    关闭活动正在管理的所有对话框。
  1. 关闭活动正在管理的所有游标。
  2. 关闭任何打开的搜索对话框
  • 也,

    onDestroy()

  • 不是析构函数。它实际上并没有破坏对象。这只是基于特定状态调用的方法。因此,在超类的onDestroy()运行并返回后,您的实例仍然有效并且运行良好。Android会保留进程,以防用户想要重新启动应用程序,这将加快启动阶段。该进程不会做任何事情,如果需要回收内存,该进程将被杀死

    2
    投票

    onCreate()]中调用finish():

    onCreate()-> onStart()-> onResume()

    。如果用户退出,应用程序将调用-> onPause()-> onStop()-> onDestroy()

    0
    投票
    因此,如果要确保在调用finish()时完成一些工作,则不能将其放在onDestroy()中,但是需要在实际调用它之前,在与调用finish()相同的位置进行。

    finish()只是发送回android中的上一个活动,或者您可以说它正在向应用程序中退一步

    -6
    投票

    72
    投票
    我在@K_Anas答案上的2美分。我对finish()方法执行了一个简单的测试。在活动生命周期中列出了重要的回调方法

      在onCreate()中调用finish():
    1. onCreate()-> onDestroy()
    2. 在onStart()中调用finish():
    3. onCreate()-> onStart()-> onStop()-> onDestroy()
    4. 在onResume()中调用finish():
    5. onCreate()-> onStart()-> onResume()-> onPause()-> onStop()-> onDestroy()
    6. ] >>我的意思是,当执行finish()时,将调用这些方法的对应方法以及之间的任何方法。

    例如:

    onCreate() counter part is onDestroy() onStart() counter part is onStop() onPause() counter part is onResume()


    26
    投票
    还请注意,如果您在意图后调用finish(),则无法通过“后退”按钮返回到上一个活动

    12
    投票
    onDestroy()用于最终清理-释放您可以自己使用的资源,关闭打开的连接,读取器,写入器等。如果您不重写它,系统将执行它必须执行的操作。

    9
    投票
    Finish()方法将破坏当前活动。如果您不希望在用户按下“后退”按钮时一次又一次地加载此活动,则可以使用此方法。基本上,它将清除当前堆栈中的活动。

    5
    投票
    各种答案和注释都声称finish()可以跳过onPause()和onStop()并直接执行onDestroy()。公平地讲,关于此(http://developer.android.com/reference/android/app/Activity.html)的Android文档指出“活动正在完成或被系统破坏”,这很含糊,但可能暗示finish()可以跳转到onDestroy()。

    5
    投票
    除了上面的@rommex答案之外,我还注意到finish()确实将活动的销毁排入队列,这取决于活动的优先级。

    3
    投票
    @ user3282164根据Activity生命周期,应在调用onPause()时经历onStop()-> onDestroy()-> finish()

    2
    投票
    例如,如果将finish()放置在onActivityResult()回调中,而onResume()尚未运行,则将首先执行onResume(),只有在此之后才调用onStop()onDestroy()。] >

    注意:onDestroy()可能根本不被调用,如documentation上所述。

    © www.soinside.com 2019 - 2024. All rights reserved.