美文网首页
ViewHolder 为什么加上static修饰

ViewHolder 为什么加上static修饰

作者: 游侠_6fb7 | 来源:发表于2020-04-14 10:27 被阅读0次

静态内部类主要作用就是,内部类是否需要隔离“外部类的this对象(指针)”。内部类是有 this 指针的,可以“直接”访问外部类的 成员变量和成员函数(包括私有的成员)。而静态内部类,没有这个this指针,所以无法“直接”调用。

ViewHolder的构造和复用,与静不静态没关。核心是ListView(AdapterView),通过getView(int position, View convertView, ViewGroup parent) 的convertView会为开发者传入一个可以复用的对象。开发者需要利用该对象,减少应用内存的消耗。

而用static的真正目的其实是

从减少内存消耗的角度来看。ViewHolder还是应该修饰成static比较好。这样ViewHolder中可以减少Activity的this指针,由于减少了一个this指针的引用,也会对Activity的引用计数大大减少。Activity的this指针继承于android的Context上下文,对于Context的回收遗漏,是Android内存管理中很大的问题。我们减少了对Context的引用,可以更容易减少Context引用计数出现问题。

而这个解释来自于

《Effective Java》第22条 优先考虑静态成员类

其中有条建议:

如果声明成员类不要求访问外围实例,就要始终把static修饰符放在它的声明中,是它成为静态成员类,而不是非静态成员类。

因为非静态成员类的实例会包含一个额外的指向外围对象的引用,保存这份引用要消耗时间和空间,并且导致外围类实例符合垃圾回收时仍然被保留。如果没有外围实例的情况下,也需要分配实例,就不能使用非静态成员类,因为非静态成员类的实例必须要有一个外围实例。

相关文章

  • ViewHolder 为什么加上static修饰

    静态内部类主要作用就是,内部类是否需要隔离“外部类的this对象(指针)”。内部类是有 this 指针的,可以“直...

  • java final static

    参考android listview 声明ViewHolder内部类时,为什么建议使用static关键字这个问题也...

  • Android ListView优化思路12则

    1、ViewHolder模式,而且ViewHolder作为内部类使用时声明为static的 2、异步加载:耗时的操...

  • 2019-03-06 Java Interface

    Java static static 特点 static是一个修饰符,用于修饰成员。 static修饰的成员被所有...

  • 2019-03-07 Java static

    Java static static 特点 static是一个修饰符,用于修饰成员。 static修饰的成员被所有...

  • php中的访问修饰符、方法修饰符、接口

    访问修饰符 方法修饰符 static(静态的) 1、static修饰属性成为静态属性,static修饰方法成为静态...

  • OC中static、const、extern关键字理解

    static关键字 static关键字用于修饰变量。 static修饰局部变量当使用static修饰局部变量时, ...

  • JavaSE总结(3)内部类和异常

    一、static: static:静态修饰符 可以修饰成员 成员变量 成员方法 特点: static修饰的成员是属...

  • Unity面试题1

    1.在类的构造函数前加上static会报什么错?为什么? 答:在构造函数如果有public修饰的静态构造函数时会报...

  • Unity面试刷题库

    C#问题 1.在类的构造函数前加上static会报什么错?为什么? 答:在构造函数如果有public修饰的静态构造...

网友评论

      本文标题:ViewHolder 为什么加上static修饰

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