当前位置: 首页 > news >正文

20161122

关于安卓adapter里面viewholder类到底用什么修饰,今天突然看到群里一个新手提了个问题就是关于这个问题,由于网上大神们早就把这方面研究的透透的了,各种优化各种例子,我们都是拿来用,也都很简单透彻好理解,所以有时候会忽略一些细节,看到这个问题后我首先也是想不出怎么回答,因为自己一直是用static修饰的至于为什么。。估计是从学这个就是用static修饰的吧,后来发现其实不用这个修饰也没什么影响,但也没去注意它一直这样写的,在网上查了下。

静态内部类主要作用就是,内部类是否需要隔离“外部类的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引用计数出现问题。

转载于:https://www.cnblogs.com/zyd357344/p/6090013.html

相关文章:

  • 稳定,实际是暴风雨来临前的死寂
  • 单词接龙
  • Debug看方法的调用流程
  • WFS-GetFeature的请求方式和ajax提交方法
  • 杂七杂八(1)——如何查看本机的.NET Framework版本
  • 根据当月数据库自动生成下个月数据库--3
  • Bootstrap3 排版-对齐
  • 用python操作mysql数据库(之简单“插入数据”操作)
  • 数学之高幂次取模
  • iOS 地图缩放级别问题
  • docker学习实践之路[第四站]利用pm2镜像部署node应用
  • 每天一个linux命令(10):cat 命令
  • [树莓派(raspberry pi)] 01、在linux环境下给树莓派安装系统及入门各种资料
  • 任何股市都受这三个因素
  • 【AngularJS入门】用ng-repeat指令实现循环输出
  • Angular2开发踩坑系列-生产环境编译
  • Centos6.8 使用rpm安装mysql5.7
  • Java IO学习笔记一
  • java概述
  • Next.js之基础概念(二)
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Promise面试题,控制异步流程
  • python学习笔记 - ThreadLocal
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SQL 难点解决:记录的引用
  • Web设计流程优化:网页效果图设计新思路
  • Yii源码解读-服务定位器(Service Locator)
  • 关于字符编码你应该知道的事情
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 排序算法学习笔记
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 正则表达式小结
  • C# - 为值类型重定义相等性
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​iOS实时查看App运行日志
  • #pragma预处理命令
  • #stm32整理(一)flash读写
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)setTimeout 和 setInterval 的区别
  • (转)关于pipe()的详细解析
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .apk文件,IIS不支持下载解决
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET程序员迈向卓越的必由之路
  • .Net环境下的缓存技术介绍
  • @Transactional类内部访问失效原因详解
  • [ IOS ] iOS-控制器View的创建和生命周期