我们在推出一款APP之后,中间出现了一些体验上的问题,一个明显的是界面卡顿,针对此问题我们采取了如下的一些措施,起到了一些效果。

1.优化界面层次

针对可以合并的界面层次进行合并,减少界面的渲染,这个过程中主要使用的工具是开发者设置显示过度渲染,红色的区域的必须要优化的地方。

2.减少界面刷新次数

减少界面刷新次数是很好的界面优化,尤其是针对ListView之类的集合型页面。

【1】使用延时减少界面刷新次数:我们做了一个延时机制,每次刷新延迟1s进行,当在这一秒钟又有刷新请求的时候就继续推迟刷新时间,最多达到5s的时候就必须进行界面刷新,这一效果是非常明显的。

【2】刷新界面之前判断是否真的需要刷新:针对其他的固定界面,我们会进行判断是否需要进行界面刷新,如果当前显示与要显示的是一样的,那就没有必要进行刷新。

【3】缓存界面:如果我们要时刻更新ListView中的界面,而这些更新也不会导致ListView的顺序,那就把这些View都做个缓存,直接进行View的更新。

【4】静态化界面:这是缓存界面的一种方式,针对复杂的界面使用static变量缓存,每次构建界面的时候,针对这个static view做调整。

3.界面模型与数据模型分离

原来的时候我们在View显示之前,会针对数据模型进行处理,处理之后才会在界面上显示,这些处理逻辑应该提取出来放在异步线程中,生成具体的界面模型,显示的时候直接拿来展示。

4.把io操作从主线程中剥离出来

这个是3的一个具体体现,把操作文件,数据库等io操作从主线程中剥离出来,避免主线程阻塞。

5.避免资源竞争。

尽量减少一些资源的产生,例如程序中new的操作尽量减少,线程数量合理控制。当内存资源消耗严重时,垃圾回收会被频繁调起,在日志中经常会出现skip frame的情况。

Android界面优化方法的更多相关文章

  1. Android界面刷新方法

    Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中 ...

  2. [转]探索 Android 内存优化方法

    前言 这篇文章的内容是我回顾和再学习 Android 内存优化的过程中整理出来的,整理的目的是让我自己对 Android 内存优化相关知识的认识更全面一些,分享的目的是希望大家也能从这些知识中得到一些 ...

  3. [原] Android性能优化方法

    GPU过度绘制 打开开发者选型,"调试GPU过度绘制",蓝.绿.粉红.红,过度绘制依次加深 粉红色尽量优化,界面尽量保持蓝绿颜色 红色肯定是有问题的,不能忍受 使用Hierarch ...

  4. Android性能优化方法(九)

    通常我们写程序,都是在项目计划的压力下完成的,此时完成的代码可以完成具体业务逻辑,但是性能不一定是最优化的.一般来说,优秀的程序员在写完代码之后都会不断的对代码进行重构.重构的好处有很多,其中一点,就 ...

  5. Android性能优化方法(八)

    Android SDK tools目录下提供一个观察布局的工具,层级观察器(Hierarchy Viewer).Hierarchy Viewer工具是一个非常好的布局优化工具,同时,你也可以通过它学习 ...

  6. Android性能优化方法(七)

    Java从JDK1.2版本开始,就把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 这里重点介绍一下软引用和弱引用. 如果 ...

  7. Android性能优化方法(六)

    ContentProvider优化改进 1.索引简单的说,索引就像书本的目录,目录可以快速找到所在页数,数据库中索引可以帮助快速找到数据,而不用全表扫描,合适的索引可以大大提高数据库查询的效率.(1) ...

  8. Android性能优化方法(五)

    有时候,我们的页面中可能会包含一些布局,这些布局默认是隐藏的,当用户触发了一定的操作之后,隐藏的布局才会显示出来.比如,我们有一个Activity用来显示好友的列表,当用户点击Menu中的“导入”以后 ...

  9. Android性能优化方法(四)

    在一个应用程序中,一般都会存在多个Activity,每个Activity对应着一个UI布局文件.一般来说,为了保持不同窗口之间的风格统一,在这些UI布局文件中,几乎肯定会用到很多相同的布局.如果我们在 ...

随机推荐

  1. NSString字符串类型-学习总结

    1.字符串的创建 (1)创建常量字符串 NSString *str = @"This is a String"; //str是变量名 (2)创建空的字符串,给字符串赋值 NSStr ...

  2. 7 Hbase put方式插入数据

    package com.hikvision.hbase.vertify.test; import org.apache.hadoop.conf.Configuration; import org.ap ...

  3. uva11426 欧拉函数应用

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=121873#problem/F 题目大意:给你一个数n,让你输出(i=1-> ...

  4. Oracle11.2.0.4 RAC安装文档

    1 环境配置 参考官方文档<Grid Infrastructure Installation Guide for Linux> 1.1 软件环境 操作系统: [root@howe1 ~]# ...

  5. Django-Rest-Framework 教程: 快速入门

    本篇中, 我们会创建一个简单的API, 用来查看和编辑django默认的user和group数据. 1. 设置 我们创建django项目tutorial, 和app quickstart: # 创建新 ...

  6. Scala学习文档-各种使用模式的情况

    模式在变量定义中 在定义val或者var的时候,可以使用模式替代简单的标识符,如可以使用模式拆分元组,并把每个值分配给变量 val myTuple = (123,"abc") va ...

  7. C语言日期时间标准库

    用思维导图整理: 代码: #include <stdio.h> #include <time.h> #include <string.h> int main() { ...

  8. Eclipse配置JDK的源代码的src.zip

    Eclipse配置JDK的源代码的src.zip包很简单.只需要简单的几个步骤. 1.点 “window”-> “Preferences” -> “Java” -> “Install ...

  9. Android CursorAdapter

    CursorAdapter 继承于BaseAdapter是个虚类,它为cursor和ListView提供了连接的桥梁.            public abstract class     Cur ...

  10. Check iO:初学Python

    The end of other For language training our Robots want to learn about suffixes. In this task, you ar ...