如果我在AsyncTask中保留一个活动的WeakReference,我的应用程序对象是否仍然存活?

时间:2018-04-04 08:50:42

标签: android android-asynctask weak-references activity-lifecycle application-lifecycle

如果我在WeakReference中保留AsyncTask个活动,我的应用程序对象是否会保持活动状态还是会被垃圾回收?

1 个答案:

答案 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()并保存以备以后使用。