Android App界面和流畅度优化

所谓界面和流畅度优化,就是尽可能多地消除用户可直接感知的、影响用户操作体验的bug

1、人为在UI线程中做轻微耗时操作,导致UI线程卡顿

人为避免一切耗时操作

开启 StrictMode(严苛模式)

在Activity里加入如下代码

 
  1. public void onCreate() {

  2. if (DEVELOPER_MODE) {

  3. StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

  4. .detectDiskReads()

  5. .detectDiskWrites()

  6. .detectNetwork() // or .detectAll() for all detectable problems

  7. .penaltyLog()

  8. .build());

  9. StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

  10. .detectLeakedSqlLiteObjects()

  11. .detectLeakedClosableObjects()

  12. .penaltyLog()

  13. .penaltyDeath()

  14. .build());

  15. }

  16. super.onCreate();

  17. }

注意:StrictMode只适用于测试版本,千万不要在上线版本使用 StrictMode

2、布局Layout过于复杂,无法在16ms内完成渲染
利用drawableXXX属性来做有图文的控件,特别是类似设置页面中文字在左右边有剪头的View
多用tools的属性例如tools:text tools:listitem

3、同一时间动画执行的次数过多,导致CPU或GPU负载过重
人为避免同一时间执行过多动画

4、View过度绘制,导致某些像素在同一帧时间内被绘制多次
简化布局嵌套
减少不必要的背景颜色填充(用纯色图片代替颜色)

在设置-> 开发者选项->调试GPU过度绘制中打开调试
定位绘制区域
利用Android提供的工具进行位置确认以及修改(HierarchyView,Tracer for OpenGL ES)
定位到具体的视图(xml文件或者View)
通过代码和xml文件分析过度绘制原因
结合具体情况进行优化

5、View频繁触发onMeasure,onLayout,导致onMeasure,onLayout累计耗时过多及整个View频繁的重新渲染
使用系统性能分析工具systrace分析measure, layout耗时

6、内存频繁触发GC过多(同一帧中频繁创建内存),导致暂时阻塞渲染操作
使用内存分配跟踪工具Allocation Tracker工具跟踪对象的分配

7、冗余资源及逻辑等导致加载和执行缓慢
lint检查删除冗余
去除重复库无用库,使用更小库
去除无用的语言资源
图片压缩webp
开启ProGuard
开启shrinkResources

 
  1. buildTypes{

  2. release{

  3. miniyEnabled true

  4. shrinkResources true

  5. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

  6. }

  7. }

8、代码效率低
考虑使用ArrayMap代替传统数据结构HashMap
避免使用enums,推荐使用static

避免在非Constants类中使用static

其他详见《大话Java性能优化》

9、其他
对于不需要使用硬件加速的activity(没有动画效果、视频播放以及各种多媒体文件),不要在AndroidManifest.xml文件声明activity时添加“android:hardwareAccelerated="true"”关掉硬件加速可节省应用内存

对于需要横竖屏转换的应用,又不想在横竖屏切换的时候重新跑onCreate方法,可以在AndroidManifest.xml文件声明Activity时添加“android:configChanges="screenSize|orientation"”

为了减轻应用程序主进程的内存压力,对于耗内存比较多的界面(多媒体),可以在AndroidManifest.xml文件声明Activity时下添加“android:process=".processname"”单开一个进程,退出在退出这个界面的时候一定要在该界面的onDestory方法中调用System的kill方法来杀掉该进程;

可以通过为application、activity自定义主题的方式来关掉多点触摸功能,只需要在自定义的主题下添加这两个标签:
  <item name="android:windowEnableSplitTouch">false</item>
  <item name="android:splitMotionEvents">false</item>

Android App界面和流畅度优化相关推荐

  1. Android性能优化——界面流畅度优化

    Android性能优化--界面流畅度优化 序言 首先流畅度不仅仅是受到代码的影响.也会跟机器的硬件配置有关系.所以第一点需要明确的是,流畅度最低保证在哪个硬件配置之上.这样有了一个基点之后,才能比较好 ...

  2. Android应用优化之流畅度优化实操

    上一篇流畅度概念向大家详细地描述了VSync机制和Choreographer编舞者的用法.可能所讲解的内容偏向理论概念,因此这篇是流畅度优化实操,整篇主要分三层,UI层.代码逻辑层.IO层来讲述各个优 ...

  3. Flutter 流畅度优化实践总结

    本篇内容来自ArchSummit会议分享 作者介绍: 张云龙(云从),闲鱼客户端专家.先后在网易.字节.阿里任职移动端研发.目前在阿里巴巴闲鱼技术部,目前负责闲鱼 app 包大小.流畅度.启动等端体验 ...

  4. 他把闲鱼APP长列表流畅度翻了倍(良心教程)

    简介:从"麻绳版顺滑"到"丝般顺滑" 作者:闲鱼技术-云从 1 整体思路 闲鱼在业务的快速迭代过程中,app 的长列表滑动流畅度逐步恶化,对用户浏览内容体验产生 ...

  5. android的ui怎么做到流畅,android提高UI的流畅度

    android提高UI的流畅度 Android中所有的界面绘制工作都是在UI线程中进行的,提高UI流畅度的最核心根本在于释放UI线程.即:不在主线程中做耗时的操作. 很多人都知道,耗时的操作要放到子线 ...

  6. 淘特 Flutter 流畅度优化实践

    作者:谢伟(韦圣) 不同的业务背景引出不同的技术诉求,"用户体验特爽"是淘特的不懈追求,本文将介绍笔者加入淘特以来在Flutter流畅度方面的诸多优化实践,这些优化不涉及Engin ...

  7. App 界面卡顿 如何优化 测试性能

    1. 界面卡顿的原因 在 VSync (垂直同步)信号到来后,系统图形服务会通过 CADisplayLink 等机制通知 App,App 主线程开始在 CPU 中计算显示内容,比如视图的创建.布局计算 ...

  8. iOS性能优化系列篇之“列表流畅度优化”工具篇

    这一篇文章是iOS性能优化系列文章的的第二篇,主要内容是关于列表流畅度的优化.在具体内容的阐述过程中会结合性能优化的总体原则进行分析,所以建议大家在阅读这篇文章前先阅读一下上一篇文章:iOS性能优化系 ...

  9. 淘特 Flutter 流畅度优化实践 · 二期

    作者:谢伟(韦圣) "在上一篇<淘特 Flutter 流畅度优化实践>中说到,虽然一期效果较为明显,但距离极致的用户体验仍有不小的差距.去年,淘特端架构联合业务团队共同发起&qu ...

最新文章

  1. 在网页中插入百度地图的那些事
  2. 微信小程序的setData
  3. python中布尔类型是特殊的_Python中的特殊方法以及应用详解
  4. git 忽略 部分文件夹_git设置忽略文件和目录
  5. leetcode 888. 公平的糖果棒交换(set)
  6. angular 模块构建_我如何在Angular 4和Magento上构建人力资源门户
  7. HTTP 如何传输大文件
  8. Spring @Repository批注
  9. ERP源码 跨境电商ERP源码 Java电商ERP源码
  10. 原码一位乘的数值运算
  11. STM32高速脉冲发波方案
  12. 【总结整理】关于挪车和虚拟号的思考-转载v2ex
  13. 区块链要去中心化么?
  14. 小精灵无尽的长廊_神奇宝贝之无尽系统
  15. Swift 使用NSRange 查找字符多次出现的位置处理
  16. 平面设计入门新手怎么做数字线条海报设计
  17. 事务的基本特性是什么
  18. STM32F407ZG_入门
  19. XPath下载与安装
  20. 试题 历届真题 带分数【第四届】【省赛】【A组】

热门文章

  1. GDB 用法和命令介绍
  2. mp3播放程序c语言,Go语言音乐播放器
  3. c语言利用线程交替打印奇偶数,两个线程交替打印奇偶数
  4. java的四种修饰符访问权限
  5. 3、Docker 基础安装和基础使用 二
  6. oracle三种连接身份
  7. 软件工程第四周作业 - 四则运算
  8. nginx 平滑升级
  9. 如何使用libgdx编写一个简单的游戏(一)— 雏形
  10. 学习第六天@Linq操作