Android官方开发文档Training系列课程中文版:布局性能优化之ListView的优化

原文地址:http://android.xsoftlab.net/training/improving-layouts/smooth-scrolling.html

想要让ListView滑动流畅的关键所在是减轻主线程的负担。要确保任何的磁盘访问、网络访问、或者SQL访问都是在单独的线程中执行的。如果要测试APP的状态,可以开启StrictMode。

使用后台线程

使用工作线程可以使UI线程将所有的注意力都集中在UI的绘制上。在很多情况下,使用AsyncTask所提供的功能就可以在工作线程中处理耗时任务。AsyncTask会自动的将execute()发起的请求排队,并依次执行。这意味着你不要自己创建线程池。

在下面的示例代码中,AsyncTask被用来加载一张图像,并在加载结束后自动的将其渲染到UI上。它还在图像加载时展示了一个旋转的进度条。

// Using an AsyncTask to load the slow images in a background thread
new AsyncTask<ViewHolder, Void, Bitmap>() {private ViewHolder v;@Overrideprotected Bitmap doInBackground(ViewHolder... params) {v = params[0];return mFakeImageLoader.getImage();}@Overrideprotected void onPostExecute(Bitmap result) {super.onPostExecute(result);if (v.position == position) {// If this item hasn't been recycled already, hide the// progress and set and show the imagev.progress.setVisibility(View.GONE);v.icon.setVisibility(View.VISIBLE);v.icon.setImageBitmap(result);}}
}.execute(holder);

从Android 3.0开始,AsyncTask提供了一项新特性:可以将任务运行在多核处理器上。你可以使用executeOnExecutor()方法发起执行请求,这样多个请求就可以同时进行,同时进行的任务数量取决于CPU的核心数量。

使用View Holder持有View对象

在滑动ListView时,代码可能会频繁的调用findViewById(),这会降低性能。就算是Adapter将已经加载过的View返回,但是在复用时还是需要去查询这些View来更新它们。杜绝重复使用findViewById()的方法就是使用”View Holder”设计模式。

ViewHolder对象将每个View组件存储于布局容器的tag属性内,所以你可以快速访问它们而不需要每次都去查询。首先,你需要创建一个类来持有已加载的View:

static class ViewHolder {TextView text;TextView timestamp;ImageView icon;ProgressBar progress;int position;
}

然后对ViewHolder的成员属性赋值,然后将其存放在布局容器内:

ViewHolder holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.listitem_image);
holder.text = (TextView) convertView.findViewById(R.id.listitem_text);
holder.timestamp = (TextView) convertView.findViewById(R.id.listitem_timestamp);
holder.progress = (ProgressBar) convertView.findViewById(R.id.progress_spinner);
convertView.setTag(holder);

那么现在就可以很方便的对这些View组件进行访问,而不再需要对它们单独进行查询,如此便可以节省出宝贵的CPU资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 - WWW2020 | 从自然语言交互中提取开放意图

论文笔记整理&#xff1a;娄东方&#xff0c;浙江大学博士后&#xff0c;研究方向为事件抽取。Vedula N, Lipka N, Maneriker P, et al. Open Intent Extraction from Natural Language Interactions[C]//Proceedings of The Web Conference 2020. 2020: 2009-2020.来源&#x…

OCR数据处理(上篇)+OCR数据处理(下篇)

OCR数据处理&#xff08;上篇&#xff09;&#xff1a;https://mp.weixin.qq.com/s/u956SljZEvInqMQCCTcEkg OCR数据处理&#xff08;下篇&#xff09;&#xff1a;https://mp.weixin.qq.com/s/KWoh4pGapYh8S5T7VHNrTQ

深度学习在文本领域的应用

背景 近几年以深度学习技术为核心的人工智能得到广泛的关注&#xff0c;无论是学术界还是工业界&#xff0c;它们都把深度学习作为研究应用的焦点。而深度学习技术突飞猛进的发展离不开海量数据的积累、计算能力的提升和算法模型的改进。本文主要介绍深度学习技术在文本领域的应…

Android官方开发文档Training系列课程中文版:电池续航时间优化之监测电池电量及充电状态

原文地址&#xff1a;http://android.xsoftlab.net/training/monitoring-device-state/index.html 引言 作为一款优秀的APP应用&#xff0c;应该总是想方设法的降低电量的消耗。通过这节课的学习&#xff0c;你将有能力使APP可以基于设备的状态来调整APP的功能及行为。 我们…

LeetCode 1009. 十进制整数的反码(位运算)

1. 题目 每个非负整数 N 都有其二进制表示。例如&#xff0c; 5 可以被表示为二进制 “101”&#xff0c;11 可以用二进制 “1011” 表示&#xff0c;依此类推。注意&#xff0c;除 N 0 外&#xff0c;任何二进制表示中都不含前导零。 二进制的反码表示是将每个 1 改为 0 且…

新分类!全总结!最新Awesome-SLU-Survey资源库开源!

文 | 哈工大SCIR 覃立波、谢天宝等指导老师 | 哈工大SCIR 车万翔教授简介口语语言理解&#xff08;Spoken Language Understanding&#xff0c;SLU&#xff09;作为任务型对话系统的核心组件&#xff0c;目的是为了获取用户询问语句的框架语义表示&#xff08;semantics frame&…

技术实践 | 用 NetworkX + Gephi + Nebula Graph 分析权力的游戏人物关系(上篇)

本文转载自公众号&#xff1a;Nebula Graph Community 。我们都知道《权利的游戏》在全世界都很多忠实的粉丝&#xff0c;除去你永远不知道剧情下一秒谁会挂这种意外“惊喜”&#xff0c;当中复杂交错的人物关系也是它火爆的原因之一&#xff0c;而本文介绍如何通过 NetworkX 访…

python将pdf中的每一页转化为图片保存

import PyPDF4 import pikepdf import fitz #对pdf文件进行简单的解密 def jiemi(pdfpath):new_pdfpath pdfpath[:-4] _new pdfpath[-4:]fp open(pdfpath, "rb")pdfFile PyPDF4.pdf.PdfFileReader(fp)# pdf 解密if pdfFile.isEncrypted:pdf pikepdf.open(pdfp…

美团外卖Android Crash治理之路

Crash率是衡量一个App好坏的重要指标之一&#xff0c;如果你忽略了它的存在&#xff0c;它就会愈演愈烈&#xff0c;最后造成大量用户的流失&#xff0c;进而给公司带来无法估量的损失。本文讲述美团外卖Android客户端团队在将App的Crash率从千分之三做到万分之二过程中所做的大…

全栈深度学习第7期: 研究方向这么多,哪些是有有趣又潜力的呢?

一起追剧鸭简介Berkeley全栈深度学习追剧计划是由夕小瑶的卖萌屋发起的优质公开课打卡项目&#xff0c;通过微信群为同期追剧的小伙伴提供交流平台。关于该计划的详请见这里。Berkeley深度学习追剧群目前已有1000小伙伴加入&#xff0c;公众号后台回复口令 深度学习追剧 入群。…

会议交流 | 人工智能与机器学习创新峰会 - 知识图谱与图神经网络分会

人工智能与机器学习创新峰会力邀 HBAT 等大厂资深研发专家做分享和技术展望时间&#xff1a;9月4日下午1:30地点&#xff1a;浦东海神诺富特大酒店OpenKG开放知识图谱&#xff08;简称 OpenKG&#xff09;旨在促进中文知识图谱数据的开放与互联&#xff0c;促进知识图谱和语义技…

Android官方开发文档Training系列课程中文版:电池续航时间优化之检查与监测坞的状态与类型

原文地址&#xff1a;http://android.xsoftlab.net/training/monitoring-device-state/docking-monitoring.html Android设备可以被放置在若干种不同的扩展坞中。这些扩展坞包括汽车坞与家庭坞以及数字与模拟坞。其中坞的状态与充电状态非常相近&#xff0c;因为这些坞也提供了…

OpenCV和tesseract-ocr的安装及使用

tesseract-ocr的安装及使用&#xff1a;https://blog.csdn.net/qq_37193537/article/details/81335165 三步解决python PermissionError: [WinError 5]拒绝访问的情况&#xff1a; https://www.jb51.net/article/185218.html https://www.pianshen.com/article/43251972054/ …

LeetCode 1046. 最后一块石头的重量(priority_queue 堆)

1. 题目 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出两块最重的石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a; 如果 x y&#xff0c;那么两块石头都…

深度学习如何均衡精度、内存、计算和通信开销?

文 | 立交桥跳水冠军知乎本文已获作者授权&#xff0c;禁止二次转载鱼与熊掌不可兼得&#xff0c;深度学习领域中的几个指标也相同。主要的指标有如下四个&#xff1a;&#xff08;1&#xff09;精度&#xff1a;自然精度是一个模型最根本的衡量指标&#xff0c;如果一个模型精…

深度学习在美团搜索广告排序的应用实践

一、前言 在计算广告场景中&#xff0c;需要平衡和优化三个参与方——用户、广告主、平台的关键指标&#xff0c;而预估点击率CTR&#xff08;Click-through Rate&#xff09;和转化率CVR&#xff08;Conversion Rate&#xff09;是其中非常重要的一环&#xff0c;准确地预估CT…

论文浅尝 - ICML2020 | 拆解元学习:理解 Few-Shots 任务中的特征表示

论文笔记整理&#xff1a;申时荣&#xff0c;东南大学博士生。来源&#xff1a;ICML2020链接&#xff1a;http://arxiv.org/abs/2002.06753元学习算法会生成特征提取器&#xff0c;这些特征提取器在进行few-shot分类时就可以达到最新的性能。尽管文献中有大量的元学习方法&…

Android官方开发文档Training系列课程中文版:电池续航时间优化之检查、检测网络连接状态

原文地址&#xff1a;http://android.xsoftlab.net/training/monitoring-device-state/connectivity-monitoring.html 通常会有一些后台服务需要连接到网络来更新数据。但是如果没有连接到互联网&#xff0c;或者由于网络太慢而不能完成更新&#xff0c;那么为什么不在连接到网…

LeetCode 304. 二维区域和检索 - 矩阵不可变(DP)

1. 题目 2. 解题 类似题目&#xff1a;LeetCode 308. 二维区域和检索 - 可变&#xff08;前缀和&#xff09; dp[i][j]数组表示 从左上角到i,j位置的所有和 sum[i1][j1]sum[i1][j]sum[i][j1]matrix[i][j]−sum[i][j]sum[i1][j1] sum[i1][j]sum[i][j1]matrix[i][j]-sum[i][j]…

一键离线下载python安装包:

Python 第三方库 批量下载安装包,离线批量安装Python第三方库&#xff1a;https://www.cnblogs.com/qiuyubai/p/14084501.html 核心代码&#xff1a; 一键生成安装包的索引文件requirements.txt pip freeze >requirements.txt pip download -d ./ -r requirements.txt全部…