静态内部类主要做用就是,内部类是否须要隔离“外部类的this对象(指针)”。内部类是有 this 指针的,能够“直接”访问外部类的 成员变量和成员函数(包括私有的成员)。而静态内部类,没有这个this指针,因此没法“直接”调用。android
ViewHolder的构造和复用,与静不静态没关。核心是ListView(AdapterView),经过getView(int position, View convertView, ViewGroup parent) 的convertView会为开发者传入一个能够复用的对象。开发者须要利用该对象,减小应用内存的消耗。函数
而用static的真正目的实际上是this
从减小内存消耗的角度来看。ViewHolder仍是应该修饰成static比较好。这样ViewHolder中能够减小Activity的this指针,因为减小了一个this指针的引用,也会对Activity的引用计数大大减小。Activity的this指针继承于android的Context上下文,对于Context的回收遗漏,是Android内存管理中很大的问题。咱们减小了对Context的引用,能够更容易减小Context引用计数出现问题。指针
而这个解释来自于对象
《Effective Java》第22条 优先考虑静态成员类继承
其中有条建议:内存
若是声明成员类不要求访问外围实例,就要始终把static修饰符放在它的声明中,是它成为静态成员类,而不是非静态成员类。开发
由于非静态成员类的实例会包含一个额外的指向外围对象的引用,保存这份引用要消耗时间和空间,而且致使外围类实例符合垃圾回收时仍然被保留。若是没有外围实例的状况下,也须要分配实例,就不能使用非静态成员类,由于非静态成员类的实例必需要有一个外围实例。get