android界面优化技巧

优化将从以下几个方面谈及

  1. 如何使用 Adapter
  2. 背景和图像
  3. 更新请求
  4. 视图和布局
  5. 内存分配

adapter:

最简单的方法, 最慢最不实用,    更新频率每秒传输帧数10左右

利用 convertView 回收视图, 效率提高 200%,更新频率每秒传输帧数30左右

使用 ViewHolder 模式, 效率提高 250%,更新频率每秒传输帧数40左右

背景和图像:

选择恰当的图像尺寸,视图背景图像总会填充整个视图区域:

* 图像尺寸不合适会导致自动缩放

* 避免实时缩放

* 最好预先缩放到视图大小

originalImage = Bitmap.createScaledBitmap(

originalImage, // 被缩放图像

view.getWidth(), // 视图宽度

view.getHeight(), // 视图高度

true); // 双线性过滤器

背景和图像 更新频率,预先缩放每秒传输帧数在50左右 ,自动缩放25左右

窗口背景:

* 默认情况下, 窗口有一个不透明的背景

* 有时可以不需要。

- 最高层的视图是不透明的

- 最高层的视图覆盖整个窗口 fill_parent

* 更新看不见的背景是浪费时间

* 删除窗口背景

- getWindow().setBackgroundDrawable(null);

- <item name="android:windowBackground">@null</item>

窗口背景 更新频率,有背景的每秒传输帧数在42左右 ,没有背景在50左右

更新请求:

* 当屏幕需要更新时, 调用 invalidate()

- 简单方便

- 但会更新整个视图, 太贵了

* 最好先找到无效区域, 然后调用。更有效的执行方法是只更新需要更新的区域

- invalidate(Rect dirty);

- invalidate(int left, int top, int right, int  bottom);

窗口背景 更新频率:invalidate传输每秒18左右,后两个在48左右

视图和布局:

* 如果一个窗口包含很多视图

- 启动时间长  测量时间长   布局时间长  绘制时间长

* 如果视图树深度太深

- StackOverflowException  用户界面反应速度很慢

* 解决方法

- 使用 TextView 的复合 drawables 减少层次

- 使用 ViewStub 延迟展开视图

- 使用 <merge> 合并中间视图

- 使用 RelativeLayout 减少层次

- 使用自定义视图、使用自定义布局

内存分配:

* 不要创建 Java 对象,在性能敏感的代码里, 尽量避免创建 Java 对象

- 测量: onMeasure()

- 布局: onLayout()

- 绘图: dispatchDraw(), onDraw()

- 事件处理: dispatchTouchEvent(), onTouchEvent()

- Adapter: getView(), bindView()

* GC, 垃圾回收:整个程序会暂停,慢 (大约几百个毫秒

* 管理好对象

* 使用软引用,内存缓存的最佳选择

* 使用弱引用,避免内存泄露

总结:

*  用 ViewHolder 实现 Adapter 的 getView

*  为背景选择正好的图像

*  针对无效区做更新请求

*  视图和布局,越简单越好

*  避免在性能敏感路径上创建对象

时间: 2024-10-07 06:48:57

android界面优化技巧的相关文章

Android性能优化技巧

Google官方tips 以下是一些关键点记录,详细看http://developer.android.com/training/articles/perf-tips.html 1.0 基础原则 好的算法和数据结构,是大幅提高性能的首选 两基础原则:不要做不需要做的事:不要分配可以避免使用的内存 1.1避免创建不必要的对象,尤其注意临时对象的创建 1.2 如果不需要访问对象的成员变量,使用静态方法.调用静态方法可以快 15%-20%. 1.3 常量使用staticfinal声明.加final声明

Android界面优化方法

我们在推出一款APP之后,中间出现了一些体验上的问题,一个明显的是界面卡顿,针对此问题我们采取了如下的一些措施,起到了一些效果. 1.优化界面层次 针对可以合并的界面层次进行合并,减少界面的渲染,这个过程中主要使用的工具是开发者设置显示过度渲染,红色的区域的必须要优化的地方. 2.减少界面刷新次数 减少界面刷新次数是很好的界面优化,尤其是针对ListView之类的集合型页面. [1]使用延时减少界面刷新次数:我们做了一个延时机制,每次刷新延迟1s进行,当在这一秒钟又有刷新请求的时候就继续推迟刷新

android App性能优化技巧浅谈

Android App性能优化,安卓App性能优化技巧,无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的.那么,如何能开发出更高性能的Android App?相信是软件开发公司以及广大程序员们头疼的一大难题.今天,就给大家提供几个提高Android App性能的技巧. 高效地利用线程1.在后台取消一些线程中的动作 我们知道App运行过程中所有的操作都默认在主线程(UI线程)中进行的,这样App的响应速度就会受

android内存优化5—对界面UI的优化(2)

在一个应用程序中,一般都会存在多个Activity,每个Activity对应着一个UI布局文件.一般来说,为了保持不同窗口之间的风格统一,在这些UI布局文件中,几乎肯定会用到很多相同的布局.如果我们在每个xml文件中都把相同的布局都重写一遍,一个是代码冗余,可读性很差:另一个是修改起来比较麻烦,对后期的修改和维护非常不利.所以,一般情况下,我们需要把相同布局的代码单独写成一个模块,然后在用到的时候,可以通过<include /> 标签来重用layout的代码. 常见的,有的应用在最上方会有一个

android内存优化4—对界面UI的优化(1)

在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的.界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局.通常,在这个页面中会用到很多控件,控件会用到很多的资源.Android系统本身有很多的资源,包括各种各样的字符串.图片.动画.样式和布局等等,这些都可以在应用程序中直接使用.这样做的好处很多,既可以减少内存的使用,又可以减少部分工作量,也可以缩减程序安装包的大小. 下面从几个方面来介绍如何利用系统资源. 1)利用系统定义的id

android内存优化6—对界面UI的优化(3)

本篇博文主要讨论一下复杂界面中常用的一种技术--界面延迟加载技术. 有时候,我们的页面中可能会包含一些布局,这些布局默认是隐藏的,当用户触发了一定的操作之后,隐藏的布局才会显示出来.比如,我们有一个Activity用来显示好友的列表,当用户点击Menu中的"导入"以后,在当前的Activity中才会显示出一个导入好友的布局界面.从需求的角度来说,这个导入功能,一般情况下用户是不使用的.即大部分时候,导入好友的布局都不会显示出来.这个时候,就可以使用延迟加载的功能. ViewStub是一

JAVA中的优化技巧(适用Android)

最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方. 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 1         控制资源的使用,通过线程同步来控制资源的并发访问: 2         控制实例的

ListView常用优化技巧(Android群英传)

内容是博主照着书敲出来的,博主码字挺辛苦的,转载请注明出处,后序内容陆续会码出. 前言:ListView--列表,它作为一个非常重要的显示方式,不管是在Web中还是移动平台中,都是一个非常好的.不开或缺的展示信息的工具.在Android中,ListView控件接管了这一重担,在大量的场合下,我们都需要使用这个控件.虽然在Android 5.X时代,RecyclerView在很多地方都在逐渐取代ListView,但ListView的使用范围依然非常的广泛,它这万年老大哥的地位也不是轻易就能撼动的.

[Android 性能优化系列]布局篇之减少你的界面层级

大家如果喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地址:http://developer.android.com/training/improving-layouts/optimizing-layout.html 在接下来的一段时间里,我会每天翻译一部分关于性能提升的Android官方文档给大家 性能优化之布局篇: [Android 性能优化系列]布