性能优化这块,分为UI性能优化、内存优化、数据库优化、网络优化、耗电优化等等。能够从1.如何发现问题,2.怎么解决问题,3.解决效果对比,这几个方面去描述。举个简单例子——UI优化,能够从 UI出现什么问题(卡顿不流畅),怎么查找问题(手机开发者权限>GPU过分绘制 发现层级问题,TraceView CPU使用状况分析),怎么解决问题(下降层级、自定义View绘图出现问题等),解决问题后性能再次对比。html
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布局工具
主要为了不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检测内存泄露
Activity若是5秒以内没法响应屏幕触碰事件和键盘输入事件,就会出现ANR,而BroadcastReceiver若是10秒以内还未执行操做也会出现ANR,Serve20秒会出现ANR 为了不ANR,能够开启子线程执行耗时操做,可是子线程不能更新UI,所以须要Handler消息机制、AsyncTask、IntentService进行线程通讯。
备:出现ANR时,adb pull data/anr/tarces.txt 结合log分析
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
第一篇简单回顾java的内存区域划分、引用、内存泄露以及场景,还有垃圾回收
第二篇主要是使用过Android Studio自带工具Memory Monitor 检测内存泄露
接上一篇,介绍另一种内存泄露的检测工具MAT
学习一下Android渲染机制,为何16ms没完成绘制就会卡顿?
Allaction Tracing是追踪内存分配的工具,能够很直观的看到某个操做是如何一步步分配的
TraceView 是 Android 平台特有的数据采集和分析工具,主要用作热点分析,找出最须要优化的点。我就是靠它将我公司的项目的启动速度明显的提升了。
StrictMode意思为严格模式,是用来检测程序中违例状况的开发者工具。使用通常是场景是检测主线程中本地磁盘和网络读写等耗时的操做。注意这个StrictMode是在Anroid2.3之后引入的。严格模式主要检测两大问题,一个是线程策略,即TreadPolicy,另外一个是VM策略,即VmPolicy。
介绍如何统计应用的启动时间和性能检查项,而且用TraceView逐个修复
由于启动页通常View的数量比较少,业务逻辑比较简单,启动不太费劲,可是该怎么写启动页面让应用的启动速度更快呢?
Android系统每隔16ms就从新绘制一次Activity,若是没有完成就会有丢帧的现象。为了减轻UI绘制的负担,有必要把Layout编写的一些注意事项总结一下
说到应用的流畅度,都会想到FPS,FPS评测应用流畅度不许确,系统获取FPS的原理是:手机屏幕显示的内容是经过Android系统的SurfaceFLinger类,把当前系统里全部进程须要显示的信息合成一帧,而后提交到屏幕上进行显示,FPS就是1秒内SurfaceFLinger提交到屏幕的帧数。可是用FPS来评测一个应用是否真的卡顿存在两个问题,咱们可使用Choreographer帧率检测。