请问一下android下软/弱引用的一个问题

 蓝云2602884825_944 发布于 2022-10-28 16:00

我对软/弱引用看了也不少博客,但是还是有一点疑问,尤其是android 2.3 之后的软/弱引用机制
尝试搜索无果后,来这里请教一下,问题应该很简单,但是对我来说很困惑有点绕不过来弯.

谢谢

ViewStub 和其他很多地方都有用到WeakReference
弱引用不是在系统GC的时候如果它只被一个软引用所引用,那么它将会被回收吗?

ViewStub的源码中,在inflate() 一个ViewStub的之后
同时将inflate()完毕的view添加至新创建的WeakReference 中,
那么这个view 不就只?被一个软引用所引用了吗?

如果这时系统GC 那么view是不是被回收了?那么下次想从WeakReference 中获取它的时候是不是又可能会为null ?从而导致错误?

或者说这种情况是不会被系统GC的? 望大鸟指教一下愚昧小弟

1 个回答
  • 我觉得你对WeakReference机制的理解没问题,对ViewStub代码的理解不对

    ViewStub 和其他很多地方都有用到WeakReference
    弱引用不是在系统GC的时候如果它只被一个软引用所引用,那么它将会被回收吗?

    在ViewStub的源码中,在inflate() 一个ViewStub的之后
    同时将inflate()完毕的view添加至新创建的WeakReference 中,
    那么这个view 不就只?被一个软引用所引用了吗?

    相关对象的引用关系是这样的:

    inflate()第一次执行前:
    
    parentView --强-> stubView
    
    此时inflatedView还不存在
    inflate()第一次执行后:
    parentView --强-> inflatedView 
    stubView --弱->inflatedView
    
    此时parentView已经不引用stubView了,stubView在inflate()中用inflatedView替换了parentView中的自己

    所以inflatedView仍然被强引用,不会被GC

    2022-11-12 01:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有