在android中使用onDestroy()

在android中使用onDestroy(),android,android-activity,Android,Android Activity,如果java提供垃圾收集,那么onDestroy()在活动生命周期中的需求是什么?onDestroy的存在是为了让您的应用程序在活动被销毁之前有最后一次机会进行清理 ArticleonDestroy()是在活动结束时框架调用的方法。调用它是为了允许您的活动执行它可能希望执行的任何关闭操作。该方法实际上与垃圾收集没有任何关系(尽管您的关闭操作(如果有的话)可能涉及释放额外的可gc的资源)。特别是,它与C++的DestuCube(尽管它的名字)无关。 如果没有要执行的关闭操作,则不需要覆盖它。基类基

如果java提供垃圾收集,那么onDestroy()在活动生命周期中的需求是什么?

onDestroy的存在是为了让您的应用程序在活动被销毁之前有最后一次机会进行清理

Article

onDestroy()
是在活动结束时框架调用的方法。调用它是为了允许您的活动执行它可能希望执行的任何关闭操作。该方法实际上与垃圾收集没有任何关系(尽管您的关闭操作(如果有的话)可能涉及释放额外的可gc的资源)。特别是,它与C++的DestuCube(尽管它的名字)无关。
如果没有要执行的关闭操作,则不需要覆盖它。基类基本上什么都不做。

它让您的程序有机会执行清理资源(比如线程)之类的操作,这样它们就不会污染相关的应用程序。如果你对它没有任何用处,那么就不要覆盖它


请参阅:

操作系统决定什么时候事情“消失”。onDestroy的存在是为了让你的应用程序在活动被销毁之前有最后的机会清理事情,但这并不意味着活动实际上会被GCed。下面是一个我推荐大家阅读的关于创建退出按钮的好文章。虽然这并不完全是您所问的,但这些概念将帮助您了解发生了什么。

onDestroy:您在活动被销毁之前收到的最后一个电话。这可能是因为活动正在完成(有人对其调用finish()),也可能是因为系统临时销毁活动的此实例以节省空间

这里有一个例子

 public void onDestroy() {
              
   super.onDestroy();

 }

当某个活动被销毁时,可以调用onDestroy,但您不能指望它。在某些情况下,系统会简单地终止活动的宿主进程,而不在其中调用此方法(或任何其他方法),因此不应使用它来执行在进程结束后仍保留的操作

请参阅:

您可以使用onDestroy()完成程序。我在下面的代码中使用它来告诉服务器,客户端正在关闭其与服务器的套接字,以便我可以通知服务器端的用户客户端已断开连接

客户:

...
protected void onDestroy(){
    super.onDestroy();
    if(connected) {
        clientMessage.println("exit");
        clientMessage.close();
        try {
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    finish();
}
...
服务器:

...
while (connected) {
    input = clientMessage.readLine();
    if ("exit".equals(input)){
        break;
    }
    ...
}
...

虽然这里有这么多答案,但没有一个答案比当前文档本身更清楚:

此方法通常用于释放资源,如与活动关联的线程,以便在其应用程序的其余部分仍在运行时,已销毁的活动不会将此类内容留在周围

正如文档中的引用所说,这是为了防止被破坏的活动留下一些东西(例如,通过引用、线程泄漏内存),但只有在应用程序的其余部分仍在运行时。如果整个任务/应用程序已关闭,则不清理线程和其他资源无关紧要,将由操作系统处理,因此您无需覆盖onDestroy

不需要做sam786正在做的事情(重写并调用super方法),因为这是完全无用的。所有其他答案似乎都是“清理”,但没有解释什么样的清理或何时清理。您不应该将任何数据保存在
ondestory()
中,因为它并不总是被调用。事实上,它可能只会在您不需要保存数据的情况下被调用(即,您的应用程序仍在运行,用户仍在使用它)。例如,当您按下home(主页)按钮时(在您希望保存数据的情况下),它不会被调用。此外,如果您的活动仅在应用程序关闭时关闭,或者只有很少的活动,则不太可能需要覆盖
ondestory
方法

如果其他人能够详细说明他们需要实现
onDestroy
的案例,我将不胜感激


也很有见解。

检查:[onDestroy()到底破坏了什么?][1][1]:希望它能帮助你。谢谢。你不能指望会调用onDestroy()。“在某些情况下,系统会在不调用此方法(或任何其他方法)的情况下简单地终止活动的宿主进程,因此不应使用此方法来执行希望在进程消失后保留的操作。”我正要编辑,但编辑队列已满。因此,使用建议的代码与不使用相同,因为系统默认情况下会这样做。销毁前,应在activity://todo中编辑并添加