【Android优化篇】提升Activity加载速度的方法
文章转自:http://www.jianshu.com/p/2007ca0290d3 作者: CoderFan
前言
这个也是我面试遇到的问题,当时只回答了一种情况,异步加载数据,没想到别的方式,回来以后专门研究了一下。
正文
Activity加载速度是很影响用户体验的,也是衡量一款APP质量的重要指标之一,所以优化Activity加载速度至关重要。
既然要优化首先需要了解Activity的生命周期,这里我昨天整理的有一篇文章Android四大组件之Activity—生命周期篇大家可以看看,从生命周期很明显可以看到,Activity一个完整的生命周期中onCreate(Bundle)、onResume()、onPause()使用比较频繁,另外onStart()因为负责的事情比较少,这里就不列入考虑。Activity之间跳转、回退都会频繁调用onResume()、onPause(),因此这两个方法中不宜做过多耗时操作,而onCreate(Bundle)中更是Activity启动后进行初始化布局的工作。
综上,不难总结出以下几个优化方向:
1、耗时操作要进行异步处理,尽量在onCreate(Bundle)方法中减少耗时操作,在onResume()也不可进行过多操作。
2、布局文件不可过于臃肿,必须布局优化
3、视图加载优化
4、另外,有时候我们会用到自定义控件,所以一定要进行绘制优化
耗时操作优化
Android是不允许在UI线程也就是主线程进行耗时操作的(例如网络请求、IO操作等等),因此要采用异步加载的方式来进行,官方推荐使用的有Handler、AsyncTask、Thread等,市场上也有很多第三方框架可供我们使用,比如RxJava,都是很不错的解决方案,这里具体用法不再多说。
布局优化
布局优化很简单,结合《开发艺术探索》和文末的参考文献的文章大致有如下思路:
1、删除多余的无用控件和层级
2、include标签
3、merge标签
4、ViewStub
第一点很明显,用不到的控件和层级只会浪费渲染时间,删除为好。
第二点和第三点,include和merge两个最好配合使用,include减少视图重用,merge帮助include减少视图层级,比如include所引用布局中根布局和include引用到的布局根布局重复,使用merge可以有效解决这个问题。
最后ViewStub可以帮助我们延迟加载暂时无用的视图,比如主页加载数据为零,要展示空数据页面,空页面不是一开始就必须加载的,可以借用ViewStub在需要加载的时候进行渲染并显示。
延迟加载优化
延迟加载除了视图优化中用到的ViewStub外,还有一些其他情况,比如侧滑菜单,刚开始是不可见的,用户点击或者滑动之后才会出现,这就是不必马上加载的,可以在获取到侧滑菜单处于可见状态的时候进行加载。另外Fragment懒加载情况也是很好的优化办法。
自定义控件优化
随着用户对APP的要求越来高,自定义控件几乎是每个APP的必备,因此自定义View带来的问题也随之增多,比如由此导致的OOM,内存泄露等等。这里只讨论自定义控件的绘制优化,主要是针对onDraw()里的优化:
1、不要在onDraw()进行大量的操作,不要创建过多的局部对象,这会导致大量的内存开销,从而导致系统频繁的GC,拉低程序执行效率
2、不要在onDraw()进行耗时操作!好吧,很明显耗时操作在Android开发中是时刻都需要注意的问题。
3、减少循环操作,成千上万次的循环会很占用CPU的时间,导致绘制不流畅。
慎用多线程
这是文末参考文献提到的,尽量不要在一个app内使用多进程!这块我不熟就不多说了,先挖个坑在这里。
总结
其实提升Activity加载速度的方法就那么多,但是这是一个需要不断进行的操作,随着我们的项目开发总是会有新的需要优化的地方,良好的用户体验关系到用户的忠诚度。
以上方法有我以前开发项目中实际用到的,结合网上查阅资料,翻阅书籍总结的,如果有不对的地方大家直接评论打脸就好。
参考文献
【Android优化篇】提升Activity加载速度的方法的更多相关文章
- 优化JavaScripe 提升首页加载速度的几种方案解析
优化目的: 1. 减少load量. 2. 优化js,加快页面加载速度. 网站中最影响网站打开速度的是什么?我会告诉是网站中的javascript,简称JS.模板中引用的JS文件越多,打开速度越慢,细读 ...
- Nginx开启Gzip压缩提升页面加载速度
1.在 nginx 的conf 目录下新建 gzip.conf 文件 #开启gzip压缩 gzip on; #设置允许压缩的页面最小字节数 gzip_min_length 1k; #申请4个单位为16 ...
- android优化从网络中加载图片速度。。
从网络中加载图片主要要注意两个方面的问题: 1.内存管理:图片占的内存很大,假如图片数量多,很容易让系统抛出out of memory的异常. 同时我们也要注意不同android版本中内存管理的区别. ...
- Web前端性能优化——如何提高页面加载速度
前言: 在同样的网络环境下,两个同样能满足你的需求的网站,一个"Duang"的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒, ...
- 【转】Web前端性能优化——如何提高页面加载速度
前言: 在同样的网络环境下,两个同样能满足你的需求的网站,一个“Duang”的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒,如果等待超过10秒, ...
- 用 Flask 来写个轻博客 (28) — 使用 Flask-Assets 压缩 CSS/JS 提升网页加载速度
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 Flask-Assets 将 Flask-Assets 应用 ...
- Blazor 发布WebAssembly使用Brotli 压缩提升初次加载速度
使用Brotli提高网站访问速度 在优化网站打开速度上,我们有很多的方法,而其中一个就是减少诸如Javascript和CSS等资源文件的大小,而减少文件大小的方法除了在代码上下功夫外,最常用的方法就是 ...
- 如何对vue项目进行优化,加快首页加载速度
上个月上线了一个vue小项目,刚做完项目,打包上线之后,传到服务器上发现首页加载巨慢. 由于开发时间比较紧,我想着怎么快怎么来,因而在开发过程中没考虑过优化性能问题,酿成最后在带宽5M的情况下页面加载 ...
- javascript实现多线程提升项目加载速度
以前大家都认为js是单线程执行的,假如我们要执行一些耗时的操作,比如加载一张很大的图片,我们可能需要一个进度条来让用户进行等待,在等待的过程中,整个js线程会被阻塞,后面的代码不能正常运行,这可能大大 ...
随机推荐
- C# Excel导数据
遇到的几个坑,记录一下. 隐藏表,隐藏行,隐藏列, 单元格合并 => 拆分并填充内容, 显示隐藏列,结果那个列 还是不显示出来,拖动旁边的列也不显示. 结果在旁边的列上,按左右箭头键就出来了,也 ...
- Oracle 查询表的字段注释
SELECT TABLE_NAME, COLUMN_NAME, COMMENTSFROM USER_COL_COMMENTSWHERE TABLE_NAME = 'TB_MENU';
- centos7升级内核
载入elrepo源,搜索内核更新资源,并进行更新操作. 具体实验步骤: # 载入公钥rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org ...
- MATLAB GUI图片添加背景
global im [filename,pathname]=uigetfile('*.jpg','输入图片'); file=strcat(pathname,filename); im=imread(f ...
- Socket通讯-Netty框架实现Java通讯
Netty简介 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 也就是说,Netty ...
- msf客户端渗透(八):持久后门,mimikatz使用,获取PHP服务器shell
持续后门 先获取一个session 在目标主机上生成持续后门 设置侦听参数 启动侦听 重新启动被攻击的主机 一启动攻击者时获取到session mimikatz的使用 mimikatz是俄罗斯组织开发 ...
- Linux 学习总结(二)
一.用户与用户组管理 1.添加用户 useradd 选项 用户名 -c 指定一段注释性描述 -d 目录,指定用户目录,若目录不存在,-m 选项可以创建目录 -g 指定用户所属用户组 -s 指定用户登陆 ...
- Spring mvc接收中文参数值乱码(tomcat配置问题)
问题| 使用java写的接口,中文参数乱码 问题分析| 请求方打印参数日志,中文无问题,tomcat中日志显示接收的参数乱码 实际是tomcat配置问题 解决方法| 在tomcat的配置文 ...
- Appium1.6启动iOS真机
前提:已经安装了Appium1.6版本,我这里用的是GUI版本 环境要求: 真机iOS9.3及以上 macOS 10.11或10.12 Xcode7及以上 安装步骤如下 第一步:iOS真机 ...
- ORM笔记
ORM工具的唯一作用就是:把对持久化对象的保存.删除.修改等操作,转换成对数据库的操作,而ORM框架则负责转换成对应的SQL(结构化查询语言)操作.(ORM工具可完成对象模型和关系模型直接的相互映射) ...