gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:12:37 25 4
gpt4 key购买 nike

示例: 理想情况下,对象是可回收垃圾( Activity 改变方向和对对象丢失的强引用)但尚未处理。所以第 2 行将返回 true。在第 3 行执行时,有什么方法可以处理对象吗?还是等到它完成?

new Thread {

WeakReference item= new WeakReference(object);

void method(){
2 if(item.get()!=null)
3 item.get().getName();
}
}

最佳答案

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

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

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

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

if(item.get()!=null)
item.get().getName();

正确用法——为进一步处理取强引用

Object object = item.get();
if(object!=null)
object.getName();

关于Android 垃圾收集器在主线程上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52364281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com