如果我在AsyncTask中保留活动的WeakReference,我的应用程序对象将保持活动状态吗?

问题描述 投票:0回答:1

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

android android-asynctask weak-references activity-lifecycle application-lifecycle
1个回答
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()并保存以备以后使用。

© www.soinside.com 2019 - 2024. All rights reserved.