如果java提供垃圾收集,那么Activity LIfecycle中onDestroy()的需求是什么?
答案 0 :(得分:19)
onDestroy:在您的活动被销毁之前收到的最终通话。这可能是因为活动正在完成(有人称为finish(),或者因为系统暂时销毁此活动实例以节省空间。
这是一个例子......
public void onDestroy() {
super.onDestroy();
}
答案 1 :(得分:1)
onDestroy()
是您的活动关闭时框架调用的方法。它被调用以允许您的活动执行它可能希望执行的任何关闭操作。该方法与垃圾收集实际上没有任何关系(尽管你的关闭操作 - 如果有的话 - 可能涉及释放可以gc的额外资源)。特别是,它与C ++ destuctors无关(尽管它的名字)。
如果您没有关闭操作,则无需覆盖它。基类基本上什么也没做。
答案 2 :(得分:1)
操作系统决定什么时候“消失”。 onDestroy可以让你的应用程序最终有机会在活动被销毁之前清理它,但这并不意味着活动实际上会被GCed。这是一个很好的article我建议人们阅读与创建退出按钮有关的内容。虽然它并不完全是您所询问的,但这些概念将帮助您了解正在发生的事情。
答案 3 :(得分:1)
您可以使用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;
}
...
}
...
答案 4 :(得分:0)
onDestroy让你的应用程序最终有机会在活动被销毁之前进行清理
答案 5 :(得分:0)
它使您的程序有机会执行诸如清理资源(比如线程)之类的操作,以便它们不会污染关联的应用程序。如果您没有任何用途,请不要覆盖它。
答案 6 :(得分:0)
onDestroy,但你不能指望它。在某些情况下,系统会在不调用此方法(或其他任何方法)的情况下简单地终止活动的托管过程,因此不应该使用它来执行在过程消失后仍然存在的事情。
请参阅:http://developer.android.com/reference/android/app/Activity.html#onDestroy()
答案 7 :(得分:0)
尽管这里有很多答案,但是没有一个答案比 current 文档本身更清楚:
该方法通常用于释放与活动相关联的线程之类的资源,以使被破坏的活动不会在应用程序的其余部分仍在运行时留下这些东西。 source
正如文档中引述的那样,它用于防止活动被破坏(例如,通过引用,线程导致的内存泄漏),但仅当应用程序的其余部分仍在运行时。如果整个任务/应用程序都已关闭,则不清理线程和其他资源将变得无关紧要,并且将由操作系统处理,因此您无需覆盖onDestroy
。
无需执行 sam786 正在做的事情(重写并仅调用super方法),因为那绝对没用。所有其他答案似乎都遵循“清理”的原则,但是没有说明清理的类型或时间。您不应该在onDestroy()
中保存任何数据,因为它并不总是被调用。实际上,只有在您不需要保存数据时(即您的应用仍在运行并且用户仍在使用它时),它才会被调用。例如,当您按下主屏幕按钮时,将不会调用它(要保存数据的情况)。另外,如果您的活动仅在应用程序关闭时关闭,或者活动很少,那么您不太可能需要覆盖onDestroy
方法。
如果其他人可以详细说明他们需要实施onDestroy
的情况,我将不胜感激。