Android提高UI性能技巧
提高UI性能的方法事实上有非常多在实际的开发中都已经用到了,在此做一下总结。
1.降低主线程的堵塞时间
若一个操作的耗时较长(超过5秒),我们应该将其放入后台线程中运行。仅仅在须要改动UI界面时通知主线程进行改动。
Android已经提供了AsyncTask以实现从主线程生成新的异步任务的方法。
2.提高Adapter&AdapterView的效率
(1)重用已生成过的Item View
(2)加入ViewHolder , 避免反复查找须要改动的控件
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text);
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
return convertView;
} static class ViewHolder {
TextView text;
ImageView icon;
}
3.优化布局文件,防止层级嵌套太深,最好不要多于5层
(1)使用观察布局的工具: Hierarchy Viewer
(2)使用布局优化工具:Layoutopt
4.优化Activity背景图
首先我们须知道,在Android的Activity中,不止有你使用SetContentView时使用的View,还包括了一些其它的View。
其根View是一个DecorView,你设置的View就被包括在当中,id为content,例如以下图所看到的:
在默认情况下。DecorView就包括了一个默认的背景图,我们将以此作为出发点。若我们须要在Activity中设置一个全屏的背景图。不应该加入ImageView或在Layout中再设置背景图。而应该调用setBackgroundDrawable()去改动DecorView的背景图。
在不须要使用背景图时,我们应将背景图清空
(1)代码方式:
getWindow().setBackgroundDrawable()
(2)xml形式
//创建文件res/values/theme.xml
<resources>
<style name="Theme.CustomBackground" parent="android:Theme">
<item name="android:windowBackground">@drawable/image</item>
</style>
</resources> //可依据须要将windowBackground设置为null或你须要的背景图
在<activity /> 或者 <application />标签中加入android:theme="@style/Theme.CustomBackground"
5.使用ViewStub
ViewStub是一个看不见的,轻量级的View。它没有尺寸,也不会绘制以及以某种形式參与到布局中来。仅仅有当调用了Inflate之后当中的View才会被实例化,这意味着用ViewStub保留View层次的结构的代价是非常低的。
使用方式见下面链接:
最新文章
- 将时间转换为xxx天前 xxx..前
- 【转】iOS应用崩溃日志分析
- 在DB2 for z/os上创建指定pagesize的数据库
- mongodb 连接和操作
- [moka同学笔记]yii表单dropdownlist样式
- VMware 不可恢复错误(svga)”解决方法
- 【转】java中byte数组与int类型的转换(两种方式)----不错
- android tips—NumberPicker,DataPicker,TimePicker样式改动
- JavaScript DOM编程艺术-学习笔记(第七章)
- 有关怎样入门ACM
- SqlServer之like、charindex、patindex 在有无索引的情况下分析
- DWR第二篇之逆向Ajax
- Javaweb学习笔记——(十三)——————JSTL、JSTL核心标签库、自定义标签、有标签体的标签、带有属性的标签、MVC、Javaweb三层框架
- 单表40G,不要吃惊,还能往里面插入数据,哈哈
- 3150luogu洛谷
- 课堂讨论 alpha版最后总结
- ArcGIS API for javascript开发笔记(五)——GP服务调用之GP模型的发布及使用详解
- Unity扩展编辑器三
- sencha touch 入门系列 (五)sencha touch运行及代码解析(上)
- 【SSH网上商城项目实战10】商品类基本模块的搭建
热门文章
- grpc mvn protobuf:compile 过程
- 机器学习 LR中的参数迭代公式推导——极大似然和梯度下降
- block的一些注意事项
- js 转化为几天前,几小时前,几分钟前...
- Kafka.net使用编程入门
- 浅谈SpringCloud (一) 什么是微服务和不使用SpringCloud怎么访问服务提供者
- 软件测试中的fault,error,failure
- ZBrush软件中Brush特性
- VMware虚拟机共享文件夹
- 路飞学城Python-Day38(第四模块思维导图)