首页 > 其他分享 >android - ViewHolder到底用什么修饰?static?final?static final?

android - ViewHolder到底用什么修饰?static?final?static final?

时间:2023-02-22 12:09:42浏览次数:42  
标签:ViewHolder 静态 static Context RecyclerView final 指针



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

个人的习惯,我通常会把内部静态类,作为一个单独的java文件。

但是Android代码中,却经常使用的Builder,LayoutParams都是以静态内部类的方式存在啊。我们可以根据实际使用情况来效仿。

另外还要提一点,内部静态类(特别是私有内部静态类),在代码混淆上效果更好。会增加反编译的难度。


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

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


今天在做RecyclerView内嵌GridView(显示图片)的时候,遇到的问题:

我使用的是RecyclerView来作为列表显示,而RecyclerView的每个item ,都包含一个GridView(5张图片) ;而RecyclerView的ViewHolder(不是Gridview的) 不加static修饰的时候,分页加载时,item中的GridView会错乱;而如果加了static修饰,gridview就不会错乱!

标签:ViewHolder,静态,static,Context,RecyclerView,final,指针
From: https://blog.51cto.com/u_15976424/6078818

相关文章

  • Rust static 和 const
    staticRust中可以使用static声明全局变量,它的声明周期是整个程序,永远是'static,它占用的内存空间也不会在执行过程中回收。全局变量必须在声明的时候马上初始化全局......
  • static
    C++中的类成员声明static函数体内static变量的作用范围为该函数体,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;在模块内的static全局变量可以被模块内......
  • final和override
    override:当在父类中使用了虚函数时候,你可能需要在某个子类中对这个虚函数进行重写,以下方法都可以:classA{virtualvoidfoo();}classB:publicA{void......
  • const static
    C++中const和static的作用static:不考虑类的情况隐藏。不加static的全局变量和函数具有全局可见性,可以在其他文件中使用,加了之后只能在该文件所在的编译模块中使用默......
  • 线程池的回调工作函数为什么必须设置成static,类内静态成员函数?
    线程池的回调工作函数为什么必须设置成static,类内静态成员函数?pthread_create(pthread_t*thread_tid,constpthread_attr_t*attr,void*(*start_routine)(void*),......
  • try...catch中finally子句的使用
    目录:finally的使用finally面试题final、finally、finalize的区别finally子句的使用:1、在finally子句中的代码是最后且一定会执行的,即使try语句块中的代码出现异常2......
  • 14 static 关键字讲解
    packagedemo04;importjava.awt.*;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.awt.event.WindowListener;publicclassT......
  • 49-final关键字
    final可以修饰类、属性、方法和局部变量在某些情况下,程序员会使用到final:1)当不希望类被继承时,可以用final修饰2)当不希望父类的某个方法被子类覆盖/重写(override)时......
  • [build/linux-mipsel-static/obj/mbedtls.o] Error 1
    build/linux-mipsel-static/inc"src/mbedtls/mbedtls.c<command-line>:0:1:error:macronamesmustbeidentifiersmake[5]:***[build/linux-mipsel-static/obj/mb......
  • Linux远程工具FinalShell
    FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求.特色功能:云端同步,免费海外服务器远程桌面加速,ssh加......