作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
示例: 理想情况下,对象是可回收垃圾( 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/
我是一名优秀的程序员,十分优秀!