如果我在WeakReference
中保留AsyncTask
个活动,我的应用程序对象是否会保持活动状态还是会被垃圾回收?
答案 0 :(得分:0)
我假设当您说“我的应用程序对象”时,您指的是android.app.Application
的实例(取决于您的特定AndroidManifest.xml
,它可能是子类,也可能不是)。
Android应用程序的Application
实例将永远不会被垃圾回收。您的应用程序运行时,只有一个Application
类的实例。根引用来自ActivityThread
,它是应用程序的主线程。 ActivityThread
输入Looper.loop()
,再也不会返回。
当Android系统确定您的应用成为"old" cached process且不再需要时,它将终止。在那种情况下,它不会费心让ActivityThread
返回,因此不会Application
实例被垃圾回收,只会在进程停止时将其删除。
下次Android启动您的应用时,将创建一个新的Application
实例。
因此,只要您的进程正在运行WeakReference
实例,将Activity
保留为Application
不会对Application
实例产生影响。您可以在任何地方安全地保存对Application
实例的引用,并可以随时访问它,有关示例,请参见Get Application instance from static method。或者,调用Context#getApplicationContext()
并保存以备以后使用。