Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android GC订单(如何工作)_Android - Fatal编程技术网

Android GC订单(如何工作)

Android GC订单(如何工作),android,Android,在这种情况下,垃圾回收收集引用的顺序是什么: 活动->按钮->onClickListener的匿名类 当onClickListener持有对包装类(活动)的引用时,如何对所有这些进行垃圾收集?如果您从未将按钮或侦听器传递到活动之外,那么这根本不会影响GC过程。当活动不再在任何地方被引用时,它们都会被垃圾收集。是的,我知道,我在问它是如何工作的,为什么会这样工作。请试着解释一下。试着把所有这些对象引用想象成一个有向图。整个Android应用程序中的对象也可以用这种方式表示。如果GC进程发现任何对象

在这种情况下,垃圾回收收集引用的顺序是什么:

活动->按钮->onClickListener的匿名类


当onClickListener持有对包装类(活动)的引用时,如何对所有这些进行垃圾收集?

如果您从未将按钮或侦听器传递到活动之外,那么这根本不会影响GC过程。当活动不再在任何地方被引用时,它们都会被垃圾收集。

是的,我知道,我在问它是如何工作的,为什么会这样工作。请试着解释一下。试着把所有这些对象引用想象成一个有向图。整个Android应用程序中的对象也可以用这种方式表示。如果GC进程发现任何对象与图完全断开连接,或者图的整个部分断开连接,那么它就有资格进行垃圾收集。那么为什么单例不被垃圾收集呢?单例通常被实现为
static
变量,而
static
变量实际上不适合收集。有关更多信息,请参阅。如果单例中使用的静态变量未声明为final,则可以在单例完成后将其设置为null;这将允许收集引用的对象。然而,一个更好的想法可能是根本不使用单例;因为它们奇怪的不确定的初始化行为使得它们很难在多线程应用程序中测试和不可预测(即使在同步它们时)。