目录
引言:
APP优化:
网络优化:
内存优化:
卡顿优化:
引言:
先大概对Android性能优化做一个简单分类和梳理。由于性能影响因素多,比如本文分类的APP,内存,网络,卡顿都是互相影响的。卡顿应该是用户最直观可见的性能问题了。
APP优化侧重于启动,UI绘制以及资源优化这三个方面考虑
内存优化侧重于内存抖动,内存泄露,扩大内存方面考虑
网络优化则是从网络请求,数据压缩的方面考虑
上面这三个方面的优化就有利于我们系统卡顿问题的解决。刚才说的卡顿是用户直观感知的,从显示的角度看卡顿问题的话就是丢帧掉帧引起的。本篇暂时不展开与显示刷新原理方面的内容说明。
APP优化:
UI优化(布局优化,绘制优化)
布局优化:RelativeLayout替代LinearLayout,作为默认根布局。降低嵌套布局,提高渲染效率
<include>标签
<ViewStub>标签加载不常用的布局,延迟加载
<merge>标签减少布局的嵌套层次
安装包优化(res资源文件优化)
减小体积
res资源优化
代码优化:
lib资源优化:
assets资源优化
代码混淆
使用proGuard代码混淆工具,包括压缩,优化,混淆等功能
插件化:功能模块放入服务器,需要时再加载
启动优化:
冷启动,热启动,耗时线程用子线程去执行
启动逻辑,加载逻辑;
非必要的对象可以延迟初始化;
不要创建全局静态对象,而是转向单例模式,这样应用进程只需要第一次时初始化
考虑依赖注入框架
网络优化:
合并网络请求,减少网络请求
避免DNS解析
大量的数据加载采用分页的方式
网络数据采用GZIP压缩
加入网络数据缓存,避免频繁请求网络
上传图片时,在必要的时候压缩图片
内存优化:
避免内存泄露:长生命周期的对象引用了短生命周期的对象。堆上分配的对象已经不再使用了,但是GC收集器无法对其进行回收。
静态变量问题:将内部类设为静态内部类或独立出来使用context.applicationContext()
单例模式:传参context.getApplicationconText()
属性动画:Activity.onDestroy调用Animation.cancel()
Handler:使用静态内部类+WeakReference弱引用;当内部类结束生命周期时清空消息队列
线程问题:将AsyncTask和Runnable设为静态内部类或独立出来,在线程内部采用弱引用保存Context引用
资源未关闭:在Activity销毁时即使关闭或者注销:
BroadcastReceiver调用unregisterReceiver()
Cursor,Stream,file:调用close
Adapter问题:
不使用缓存而只依靠getView()每次重新实例化Item,会给GC制造压力
在构造Adapter时使用convertView
WebView问题:webView和Activity在同一线程
集合问题:map等有静态引用,没有做删除操作
扩大内存:清单文件中Application添加 largeHeap=“true”属性;同一个应用开启多个进程来运行,这样可以增大应用的总内存空间
卡顿优化:
不要在主线程进行网络访问或者大文件IO操作
优化布局
优化绘制:避免不必要的重绘以及过度绘制
onDraw不要创建新的局部对象。
onDraw方法不要做耗时操作
文章来源:https://www.toymoban.com/news/detail-684330.html
文章来源地址https://www.toymoban.com/news/detail-684330.html
到了这里,关于Android系统-性能-优化概述的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!