美文网首页android学习之路AndroidAndroid开发
ListView优化为何ViewHolder用static类

ListView优化为何ViewHolder用static类

作者: CPPAlien | 来源:发表于2016-02-19 14:58 被阅读1347次

    如果有人还不了解ViewHolder为什么可以起到优化作用,
    我这边再做下简单说明:
    Android的findViewById动作是比较耗时的,需要遍历布局的树形结构,才能找到相应的视图。所以如果想在这一块进行优化,我们就需要把find过后的内容进行缓存,所以就用ViewHolder的方法。

    这个方法很容易理解,但是可能有些人还是比较较真,就像我,这样可以起到缓存作用,那为什么内部类非得要声明成static的呢,普通的内部类不是也起到这样的效果吗?这个疑问也困扰了我很久。直到我看了《Effective Java》这本书,才解开我这个困惑,原来这不是Android的优化,而是Java提倡的优化。

    《Effective Java》第22条 优先考虑静态成员类
    其中有条建议:
    如果声明成员类不要求访问外围实例,就要始终把static修饰符放在它的声明中,使它成为静态成员类,而不是非静态成员类。
    因为非静态成员类的实例会包含一个额外的指向外围对象的引用,保存这份引用要消耗时间和空间,并且导致外围类实例符合垃圾回收时仍然被保留。如果没有外围实例的情况下,也需要分配实例,就不能使用非静态成员类,因为非静态成员类的实例必须要有一个外围实例。

    PS:强烈推荐《Effective Java》这本书,会让你有意想不到的收获。

    相关文章

      网友评论

        本文标题:ListView优化为何ViewHolder用static类

        本文链接:https://www.haomeiwen.com/subject/zbcvkttx.html