Android 垃圾收集器在主线程上运行?

Nic*_*ick 3 android garbage-collection

示例: 假设理想情况下该对象是可垃圾收集的(活动改变了方向并且对对象的强引用丢失)但尚未处置。所以第 2 行将返回 true。有什么方法可以在第 3 行执行时释放对象吗?还是要等到结束?

new Thread {

       WeakReference item= new WeakReference(object);

       void method(){
2      if(item.get()!=null)
3          item.get().getName();
      }
}
Run Code Online (Sandbox Code Playgroud)

Dal*_*kar 5

如果您对某个对象有强引用,则该对象不符合 GC 条件。

只要您可以访问该引用,就无法在空检查和下一行或任何其他行之间的代码中处理强引用对象object。仅当将该对象引用设置为 null,或者将另一个对象分配给该引用时,如果没有其他引用指向该对象,则前一个对象可以被垃圾回收。

另一方面,当您处理(任何类型的)弱引用时,首先必须从弱引用包装器中取出强引用,然后您可以安全地进一步使用该强引用(在检查它不为空之后,课程)。如果不采用强引用,弱包装器中的对象随时可能消失。

getName错误的用法 - 可以在空检查和调用之间收集对象

if(item.get()!=null)
   item.get().getName();
Run Code Online (Sandbox Code Playgroud)

正确使用——为进一步加工提供强有力的参考

Object object = item.get();
if(object!=null)
   object.getName();
Run Code Online (Sandbox Code Playgroud)