当应用程序带到后台时,它的静态实例可能被清除?

时间:2011-11-30 03:33:13

标签: android android-lifecycle application-lifecycle

Store application global data

有人说当任务带到后台时,android会清除单例实例。 这是真的吗?

我意识到当我尝试杀死前台任务时(通过使用DDMS),应用程序会自动重启它。必须有一些守护,不是吗?

Ofcouse,重启前台应用程序对我来说是安全的,因为当进程重启时,我可以通过调用Application的onCreate来重新初始化我的应用程序。

但是我对后台任务/应用程序感到困惑。是否会杀死后台任务并重启它,就像前台应用程序一样?(我hava尝试杀死后台应用程序,它退出而不重启)。或者dalvik清除并且回收静态实例?

如果dalvik真的很清楚唱歌,我该如何避免呢?

1 个答案:

答案 0 :(得分:1)

每个Android应用程序都在一个进程中运行。当任务(无论背景或前景)被杀死时,实际上该进程被终止。就像Java应用程序在JVM上运行的情况一样,每个JVM实例都是一个进程。

dalvik对象管理中没有与JVM不同的魔力。我不认为dalvik会清除单例实例。没有引用的对象实例将在GC上清楚,但单例不应该。

在Android应用程序中,主线程是事件派发线程。它以循环方式运行,将事件分派给适当的活动,小部件或服务。编写应用程序实际上是在实现事件回调:你编写的代码中没有main(),你从不拥有主线程,底层框架在事件发生时调用你的代码。当任务变为后台时,即没有任何活动可见,则没有生成UI事件,因此您会看到主线程正在等待事件队列。文章Painless Threading讨论了Android应用程序使用的线程模型。