首页
学习
活动
专区
圈层
工具
发布

Android--ListView复用机制源码分析

ListView是谷歌官方的一个自定义组件,用于列表展示,其中最重要的是Adapter设配器,设配器模式的设计为它带来了极大的性能提升,一方面,内存中只有我们看的到的ItemView被创建(对比ScrollView...:有多少子控件就内存中创建多少子控件),另一方面,对ItemView缓存,以便滑动时复用 既然ListView是自定义组件,我们首先找到它的Measure方法 protected void onMeasure...View,obtainView调用的父类的方法,注意:只有一个View final View child = obtainView(0, mIsScrap);...(wrap_content下),如果所有item的高度之和小于测量建议值,则使用item的高度之和,反之,用建议值。...方法,将scrapView传过去,其实scrapView就是我们在getView方法中用来复用的convertView final View child = mAdapter.getView

69510

Android经典实战之使用ViewCompat来处理View兼容性问题

通过 ViewCompat,开发者能够使用一些在新版本中引入的方法,而不必担心应用在旧版本中的兼容性问题。...getX(View view):获取视图的相对父布局的X坐标。 getY(View view):获取视图的相对父布局的Y坐标。 getWidth(View view):获取视图的宽度。...isAttachedToWindow(View view):检查视图是否附加到窗体。 6、 视图的动画和过渡: animate(View view):获取视图的动画对象,通过它可以设置各种动画效果。....setDuration(500) .rotation(360) .start(); // 检查视图是否附加到窗口 boolean isAttached = ViewCompat.isAttachedToWindow...(myView); 总结 ViewCompat 类提供了一组方法,这些方法封装了不同版本 Android API 中的视图操作,使得在早期版本中也能使用新版本的功能。

67410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Android 内存优化】Bitmap 内存缓存 ( Bitmap 内存复用 | 弱引用 | 引用队列 | 针对不同 Android 版本开发不同的 Bitmap 复用策略 | 工具类代码 )

    2、Android 4.4(API 级别 19)以下的版本 2、在 Android 4.4(API 级别 19)及以上的版本 四、LruCache 内存缓存、内存复用工具类 1、工具类 2、工具类测试...Bitmap 对象的 recycle 方法回收内存 ; // Android 2.3.3(API 级别 10)及以下的版本中 , 使用 Bitmap 对象的 recycle 方法回收内存...级别 19)以下的版本 : 在 Android 4.4(API 级别 19) 之前的代码中 , 复用的前提是必须同时满足以下 3 个条件 :...级别 19)及以上的版本 在 Android 4.4(API 级别 19)及以上的版本 : 只要被解码后的 Bitmap 对象的字节大小 , 小于等于 inBitmap 的字节大小 , 就可以复用成功...级别 19)以下的版本 : 在 Android 4.4(API 级别 19) 之前的代码中 , 复用的前提是必须同时满足以下 3 个条件 :

    3.1K20

    【Android 内存优化】Bitmap 内存缓存 ( Bitmap 缓存策略 | LruCache 内存缓存 | LruCache 常用操作 | 工具类代码 )

    Android 2.3.3(API 级别 10)及以下的版本中 , 使用 Bitmap 对象的 recycle 方法回收内存 ; 2 ....Android 3.0(API 级别 11)及以上的版本中 , 使用新引入的 Bitmap 内存复用机制 , 通过设置 BitmapFactory.Options.inBitmap 字段 , 图像解码时..., 会尝试复用该设置的 inBitmap 内存 , 该内存复用有以下限制 : ① Android 4.4(API 级别 19)及以上的版本 : 在 Android 4.4(API 级别 19)及以上的版本中..., 只要被解码后的 Bitmap 对象的字节大小 , 小于等于 inBitmap 的字节大小 , 就可以复用成功 ; 解码后的乳香可以是缩小后的 , 即 BitmapFactory.Options.inSampleSize...可以大于1 ; ② Android 4.4(API 级别 19)以下的版本 : 在 Android 4.4(API 级别 19) 之前的代码中 , 复用的前提是必须同时满足以下 3 个条件 : 被解码的图像必须是

    2.7K20

    Spring Boot——日志介绍和配置

    SLF4J 框架的介绍 SLF4J 就是其他日志框架的门面,相当于提供日志服务的统一 API 接口,并不涉及到具体的日志逻辑实现,而是一个抽象层,对日志框架制定的一种规范、标准、接口。...,需要在 Main 方法中去分别创建这两个类的对象,然后调用方法,通过外观模式的话,可以创建一个类,用来实现之前的过程 public class LightFacade { void lightOn...TRACE:追踪信息,比 DEBUG 更细粒度的信息事件(除非有特殊用意,否则请使用 DEBUG 级别替代) 4.2....级别的使用 创建 Logger 之后就可以调用方法区打印不同级别的日志,但是发现没有 fatal 级别的信息,因为出现这个问题已经很严重了,不用通过日志就可以知道出现问题了 运行之后发现 debug 级别和...%5 若字符长度小于 5,则右边用空格填充。%-5 若字符长度小于 5,则左边用空格填充。%.15 若字符长度超过 15,截去多余字符。%15.15 若字符长度小于 15,则右边用空格填充。

    45310

    MySQL增删改查_sql where case when

    只有 sysadmin 固定服务器角色成员或具有 ALTER TRACE 权限的用户才能指定 19 到 25 之间的严重级别。...若要使用 19 到 25 之间的严重级别,必须选择 WITH LOG 选项。...注意,如果错误级别在20~25之间,那么数据库会认为这个错误是致命,那么数据库会将该错误记录到错误日志和应用程序日志后终止数据库的连接。任何小于 0 的严重级别被认为等于0。...’ raiserror(@error_mes,16,1,@error_obj) 上面代码中的%s,代表它要替代是一个字符串,如果我们把示例写成下面这样就会报错了: declare @error_mes...示例如下: begin try raiserror(‘这是一个错误’,16,1) //注意,只有severity级别在11~19之间,控制才会跳转到catch块中。

    1.1K20

    MSSQL触发器语句自定义错误,VFP怎么获取

    只有 sysadmin 固定服务器角色成员或具有 ALTER TRACE 权限的用户才能指定 19 到 25 之间的严重级别。...若要使用 19 到 25 之间的严重级别,必须选择 WITH LOG 选项。...注意,如果错误级别在20~25之间,那么数据库会认为这个错误是致命,那么数据库会将该错误记录到错误日志和应用程序日志后终止数据库的连接。任何小于 0 的严重级别被认为等于0。...varchar(1000) set @error_mes='这里是用户%s引发的错误描述' raiserror(@error_mes,16,1,1) 因为1不是一个字符串,如果要替代是一个整数...示例如下: begin try raiserror('这是一个错误',16,1) //注意,只有severity级别在11~19之间,控制才会跳转到catch块中。

    98720

    JAVA中计算两个日期时间的差值竟然也有这么多门道

    想想都令人窒息的操作… 日期时间的处理,是软件开发中极其常见的场景,JAVA中与日期、时间相关的一些类与API方法也很多,这里结合平时的编码实践全面的整理了下,希望可以帮助大家厘清其中的门道,更加游刃有余的面对此方面的处理...Duration的常用API方法梳理如下: 方法 描述 between 计算两个时间的间隔,默认是秒 ofXxx 以of开头的一系列方法,表示基于给定的值创建一个Duration实例。...,看下Period内部时间段记录采用了年、月、日三个field来记录: 常用的API方法列举如下: 方法 描述 between 计算两个日期之间的时间间隔。...,而我们这里传入的是两个天级别的数据,所以就不支持此类型运算,然后抛异常了。...JAVA8之后,推荐使用DateTimeFormat替代SimpleDateFormat。

    8.1K21

    第13篇-Elasticsearch查询-术语级查询

    索引MongoDB,一个简单的自动完成索引项目 19.Kibana对Elasticsearch的实用介绍 20.不和谐如何索引数十亿条消息 21.使用Django进行ElasticSearch的简单方法...另外Elasticsearch入门,我强烈推荐ElasticSearch新手搭建手册和这篇优秀的REST API设计指南 给你,这两个指南都是非常想尽的入门手册。...术语级别查询是用于根据组织/结构化数据中的确切值查找记录/文档的那些查询。 结构化数据的示例包括产品代码,日期范围,PIN码,IP等。...gt(大于)和lt(小于)选项也可用于确定范围。...在下一个博客中,我们可以看到全文查询的另一部分已被推迟,因为它需要术语级别查询的一些背景知识。

    2.5K00

    Kubernetes无痛作gRPC负载平衡

    与JSON-over-HTTP等替代协议相比,gRPC可以提供一些显著的好处,包括显著降低(反)序列化成本、自动类型检查、形式化API和更少的TCP管理开销。...这种方法给了我们最大的控制权,但是在Kubernetes这样的环境中,当Kubernetes重新安排pod时,池会随着时间的推移而变化,这种方法可能非常复杂。...我们的应用程序必须监视Kubernetes API,并与pod保持同步。 另有方法,在Kubernetes,我们可以将我们的应用程序部署为无头服务。...但是这种方法限制了我们使用特定的gRPC客户端,并且很少可能单靠使用无头服务。 最后,我们可以采用第三种方法:使用轻量级代理。...它们引入小于1ms的p99延迟,每个pod需要小于10mb的RSS,这意味着对系统性能的影响可以忽略不计。 60秒作gRPC负载平衡 Linkerd很容易尝试。

    1.6K20

    【Android 内存优化】Bitmap 硬盘缓存 ( Google 官方 Bitmap 示例 | DiskLruCache 开源库 | 代码示例 )

    ( Android 4.4 , 19 平台 ) 以后的代码中 , * 只要被解码生成的 Bitmap 对象的字节大小 ( 缩放后的 ) * 小于等于 inBitmap 的字节大小...级别 10)及以下的版本中 , 使用 Bitmap 对象的 recycle 方法回收内存 if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1...){ // 如果 API 级别小于等于 10 , 不启用 Bitmap 内存复用机制 , 返回 null 即可 return null;...级别 19)以下的版本 : 在 Android 4.4(API 级别 19) 之前的代码中 , 复用的前提是必须同时满足以下 3 个条件 :...级别 19)及以上的版本中 , 只要被解码后的 Bitmap 对象的字节大小 , 小于等于 inBitmap 的字节大小 , 就可以复用成功 ;

    1.2K30

    Python数据库编程

    Python的DB-API    DB-API是阐明一系列所需对象和数据库访问机制的标准,它可以为不同的数据库适配器和底层数据库提供一致性的访问。DB-API标准要求必须提供下表的功能和属性。...属性 描述 apilevel 需要适配器兼容的DB-API版本 threadsafety 本模块的线程安全级别 paramstyle 本模块的SQL语句参数风格 connect() Connect()函数...(多种异常) 异常 数据属性   apilevel,该字符串致命模块需要兼容的DB-API最高版本   threadsafety,指明模块线程的安全级别     0:不支持线程安全,线程间不能共享模块...参数风格    DB-API支持以不同的方式指明如何将参数与SQL语句进行整合,并最终传递给服务器中执行。该参数是一个字符,用于指定构建查询行或命令时使用的字符串替代形式。...Python DB-API游标对象总能提供游标的功能,游标对象最重要的属性是execute()和fetch()方法,所有针对数据库的服务请求都是通过它们执行的。

    1.9K20

    rust 1.88.0深度解析:2025年6月全新语言特性与平台支持详解

    2. i686-pc-windows-gnu支持降级为Tier 2 官方将i686-pc-windows-gnu平台的支持级别由Tier 1调整为Tier 2,意味着该平台会获得较少的测试和维护资源,提醒开发者注意选择更主流及得到充分支持的平台...LLVM版本最小要求升级至19 Rust 1.88.0最低外部LLVM版本要求提升到19版本,利用LLVM的新特性提升编译优化和工具链安全。 4....诸多新API加入稳定行列 • Cell::update:提供基于闭包的原子更新方法。 • 为裸指针类型增加Default实现。...• proc_macro的Span结构体方法稳定化,增强宏开发体验。 • 对切片类型新增多种as_chunks方法,方便数据分块处理。 • mod ffi::c_str模块支持C字符串的高效交互。...6. const上下文中已有API稳定支持 包括指针替换方法NonNull::replace、ptr::swap_nonoverlapping,以及Cell操作相关方法,实现更安全高效的常量环境编程

    78410

    来看一款Python内置的数据库

    想必大家耳熟能详的几款一定是Oracle、MySQL、MongoDB、Redis……这些数据库的确非常优秀,无论是功能还是性能都非常强大,是企业级别应用的最佳选择。...当我们仅仅是用于本地的数据管理,无需多用户访问,数据容量小于2T,无需海量数据处理,关键是要求移植方便、使用简单、处理迅速的话,SQLite确实是个很不错的选择。...专题简介 本场Chat以股票交易数据为例具体介绍如下内容: 概述SQLite的发展和特点 Python操作SQLite的API介绍 Pandas操作SQLite的API介绍 建立SQLite股票行情数据库...19年1月至2月的分布,可以结合groupby()按关键字分组来实现功能。...同样的方法我们绘制出在19年1月至2月的期间,股价跌幅超过5%的分布图。 ?

    2.4K10

    原生 JavaScript 手写数组 API

    本文将会先了解数组 API 的用法再模拟实现这些 API ,如果各位大佬觉得有什么不对的地方麻烦指点以下! 1. forEach 方法 这个方法会对数组元素的每一项运行传入的函数,没有返回值。...index, array) => { // 执行某些操作 item += 2 }) console.log(numbers); 我们发现并不会改变数组元素 可以利用 forEach 方法来替代...和map一样,会返回一个新的对象数组,并不会改变原数组 使用方法 从而实现了筛选出数组元素小于 3 的元素 3-3 手写 filter 方法 与map方法相比,filter需要将满足条件的元素组成新数组返回...程序员小哥:“好的,用some方法看了一下,我们没有年龄小于18岁的员工” w = staff.some(item => item.age < 18) // false ?...程序员小哥:“0,第一个,元老级别” ?老板:“挺不错的,你技术不错嘛,那你把工资总和算出来,叫秘书打钱给财务吧” ?‍?

    1K20
    领券