Android性能优化问题总结

  性能优化这块,分为UI性能优化、内存优化、数据库优化、网络优化、耗电优化等等。能够从1.如何发现问题,2.怎么解决问题,3.解决效果对比,这几个方面去描述。举个简单例子——UI优化,能够从 UI出现什么问题(卡顿不流畅),怎么查找问题(手机开发者权限>GPU过分绘制 发现层级问题,TraceView CPU使用状况分析),怎么解决问题(下降层级、自定义View绘图出现问题等),解决问题后性能再次对比。html

1、UI优化

a.合理选择RelativeLayout、LinearLayout、FrameLayout,RelativeLayout会让子View调用2次onMeasure,并且布局相对复杂时,onMeasure相对比较复杂,效率比较低,LinearLayout在weight>0时也会让子View调用2次onMeasure。LinearLayout weight测量分配原则。java

b.使用标签web

c.减小布局层级,能够经过手机开发者选项>GPU过渡绘制查看,通常层级控制在4层之内,超过5层时须要考虑是否从新排版布局。数据库

d.自定义View时,重写onDraw()方法,不要在该方法中新建对象,不然容易触发GC,致使性能降低缓存

e.使用ListView时须要复用contentView,并使用Holder减小findViewById加载View。性能优化

f.去除没必要要背景,getWindow().setBackgroundDrawable(null)网络

g.使用TextView的leftDrawabel/rightDrawable代替ImageView+TextView布局工具

2、内存优化

主要为了不OOM和频繁触发到GC致使性能降低布局

a.Bitmap.recycle(),Cursor.close,inputStream.close()性能

b.大量加载Bitmap时,根据View大小加载Bitmap,合理选择inSampleSize,RGB_565编码方式;使用LruCache缓存

c.使用 静态内部类+WeakReference 代替内部类,如Handler、线程、AsyncTask

d.使用线程池管理线程,避免线程的新建

e.使用单例持有Context,须要记得释放,或者使用全局上下文

f.静态集合对象注意释放

g.属性动画形成内存泄露

h.使用webView,在Activity.onDestory须要移除和销毁,webView.removeAllViews()和webView.destory()

备:使用LeakCanary检测内存泄露

3、响应速度优化

Activity若是5秒以内没法响应屏幕触碰事件和键盘输入事件,就会出现ANR,而BroadcastReceiver若是10秒以内还未执行操做也会出现ANR,Serve20秒会出现ANR 为了不ANR,能够开启子线程执行耗时操做,可是子线程不能更新UI,所以须要Handler消息机制、AsyncTask、IntentService进行线程通讯。

备:出现ANR时,adb pull data/anr/tarces.txt 结合log分析

4、其余性能优化

a.常量使用static final修饰

b.使用SparseArray代替HashMap

c.使用线程池管理线程

d.ArrayList遍历使用常规for循环,LinkedList使用foreach

e.不要过分使用枚举,枚举占用内存空间比整型大

f.字符串的拼接优先考虑StringBuilder和StringBuffer

g.数据库存储是采用批量插入+事务

 

https://www.jianshu.com/p/6d855e984b99

https://blog.csdn.net/hanchendong/article/details/61920501

https://blog.csdn.net/jiankeufo/article/details/79277063

http://www.javashuo.com/article/p-pytjtdfs-ku.html

一、Android性能优化第(一)篇---基本概念http://www.jianshu.com/p/c0e5c13d5ecb

第一篇简单回顾java的内存区域划分、引用、内存泄露以及场景,还有垃圾回收

二、Android性能优化第(二)篇---Memory Monitor检测内存泄露http://www.jianshu.com/p/ef9081050f5c

第二篇主要是使用过Android Studio自带工具Memory Monitor 检测内存泄露

三、Android性能优化第(三)篇---MAT比Menmery Monitor更强大http://www.jianshu.com/p/2d47d1cf5ccf

接上一篇,介绍另一种内存泄露的检测工具MAT

四、Android性能优化第(四)篇---Android渲染机制http://www.jianshu.com/p/9ac245657127

学习一下Android渲染机制,为何16ms没完成绘制就会卡顿?

五、Android性能优化第(五)篇---Allaction Tracing追踪内存分配的轨迹http://www.jianshu.com/p/d9e426c10581

Allaction Tracing是追踪内存分配的工具,能够很直观的看到某个操做是如何一步步分配的

六、Android性能优化第(六)篇---TraceView 分析图怎么看http://www.jianshu.com/p/388c693c1b58

TraceView 是 Android 平台特有的数据采集和分析工具,主要用作热点分析,找出最须要优化的点。我就是靠它将我公司的项目的启动速度明显的提升了。

七、Android性能优化第(七)篇---StrickMode严苛模式检测耗时与内存问题http://www.jianshu.com/p/2ebc9363ea16

StrictMode意思为严格模式,是用来检测程序中违例状况的开发者工具。使用通常是场景是检测主线程中本地磁盘和网络读写等耗时的操做。注意这个StrictMode是在Anroid2.3之后引入的。严格模式主要检测两大问题,一个是线程策略,即TreadPolicy,另外一个是VM策略,即VmPolicy。

八、Android性能优化第(八)篇---App启动速度优化之耗时检测处理http://www.jianshu.com/p/a0e242d57360

介绍如何统计应用的启动时间和性能检查项,而且用TraceView逐个修复

九、Android性能优化第(九)篇---App启动速度优化之启动页设计http://www.jianshu.com/p/777fe2f71039

由于启动页通常View的数量比较少,业务逻辑比较简单,启动不太费劲,可是该怎么写启动页面让应用的启动速度更快呢?

十、Android性能优化第(十)篇---布局优化http://www.jianshu.com/p/c0e0cca14162

Android系统每隔16ms就从新绘制一次Activity,若是没有完成就会有丢帧的现象。为了减轻UI绘制的负担,有必要把Layout编写的一些注意事项总结一下

十一、Android性能优化第(十 一)篇---卡顿分析,正确评测流畅度http://www.jianshu.com/p/d126640eccb1

说到应用的流畅度,都会想到FPS,FPS评测应用流畅度不许确,系统获取FPS的原理是:手机屏幕显示的内容是经过Android系统的SurfaceFLinger类,把当前系统里全部进程须要显示的信息合成一帧,而后提交到屏幕上进行显示,FPS就是1秒内SurfaceFLinger提交到屏幕的帧数。可是用FPS来评测一个应用是否真的卡顿存在两个问题,咱们可使用Choreographer帧率检测。

相关文章
相关标签/搜索