如何完全退出android应用程序?

如何完全退出android应用程序?,android,quit,Android,Quit,我面临着类似的问题,比如。我在应用程序中使用了一些静态类成员,包括单例。当我使用finish离开主活动并再次启动它时,所有静态成员仍然存在。调用Process.killProcessProcess.myPid似乎不是一个好的解决方案;我也不想在离开应用程序时取消设置所有静态成员,因为在扩展应用程序时,这很容易出错。那么,如何才能正确地完全退出android应用程序呢?您不需要处理静态数据成员。他们没有伤害任何人。Android会在进程需要内存时终止进程。正如@commonware告诉你的那样,你

我面临着类似的问题,比如。我在应用程序中使用了一些静态类成员,包括单例。当我使用finish离开主活动并再次启动它时,所有静态成员仍然存在。调用Process.killProcessProcess.myPid似乎不是一个好的解决方案;我也不想在离开应用程序时取消设置所有静态成员,因为在扩展应用程序时,这很容易出错。那么,如何才能正确地完全退出android应用程序呢?

您不需要处理静态数据成员。他们没有伤害任何人。Android会在进程需要内存时终止进程。

正如@commonware告诉你的那样,你可以离开静态成员,Android操作系统会处理它,如果你仍然需要,你可以跳过onDestroy并清空所有静态变量。那么下次应用程序启动时,它将为空。

我认为这是关于这个主题的一些重要观察:

这是Android编程的一个重要方面。我认为,在这里查看活动生命周期文档并不能很好地解释这种行为

有一个基础类加载器概念,它加载类,包括静态变量的所有初始设置。一旦活动停止,甚至被破坏,它可能仍会保留在内存中

当您现在再次启动应用程序时,如果仍然可以在内存中找到该类,则将获取该类的最后状态。在这种情况下,类不会像第一次加载并初始化类时那样初始化

这也是为什么在开发/调试期间重新启动应用程序确实会在启动前清理整个类,而在安装应用程序并在设备上启动/退出时,您可能不会像调试期间那样强制真正启动

取消变量只会增加GC的概率。你不可以强行卸载。因此,从这个意义上说,没有办法完全退出应用程序

我们必须围绕这一系统行为设计应用程序(尤其是更复杂的应用程序)

这是我到目前为止的理解-不幸的是,我没有找到任何关于这方面的好的全面的文档


如果我错了,请原谅并改正

问题是一个单例启动一个线程,我不想在应用程序关闭时让它继续运行。当我重新启动应用程序时,线程不会像我在singleton构造函数中所做的那样重新启动。@zolex:singleton不应该启动线程。修复您的应用程序,让实际的组件活动或服务管理线程,并让其生命周期方法(例如,服务的onCreate和onDestroy)负责清理线程。@zolex:所有线程都需要由具有生命周期的组件管理,特别是为了避免您所抱怨的问题。单身没有生命周期。@zolex:Android中没有关闭活动的概念,所以我不得不猜测你的意思。如果此线程由活动管理,请在onResume中分叉该线程,并采取措施使该线程在onPause中关闭。然后,当用户离开活动时,线程将被清理。该线程已经停止。问题是在应用程序再次启动时重新启动线程,因为线程是在单例构造函数中启动的,而在实例被保留时不会再次调用。我说过这样做很容易出错,因为如果扩展应用程序,可能会忘记为其他变量设置空值。