内存 java
1. 申请内存须要控制大小,尤为是高分辨率bitmap和大 图resources android
缓存要有严格的上限控制。 数据库
确实须要额外内存,native申请,绕过虚拟机 缓存
2. 将activity做为context,被静态类静态引用后没法释放 多线程
3. 线程未退出,对相关对象的引用不能释放 函数
4. 学会用mat看java的内存泄漏,mat也能够用来查询 native(C,C++)的内存泄漏问题 post
界面 动画
1. 尽可能减小view层级,使用merge减小view层次 <merge xmlns:android="http://schemas.android.com/apk/res/ spa
android">
<ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="center" android:src="@drawable/golden_gate" /> </merge> 线程
2. ViewStub,暂时不用的view,能够用viewstub占位,方便且高效
3. view以及各png的id最好惟一,之前android有bug,循 环溢出,容易解析失败
人眼很挑剔,想要流畅必须50fps,4ms画界面,16ms处理任务
4. ondraw函数千万别作耗时函数,例如在ondraw里给textview setbackground,ondraw函数里也不准有业务逻辑,我见过用ondraw 来计算位置,和动画时间的
5. 切记:主线程不能执行长时间操做,要放到一个非主线程处理,
同时也防止anr,写代码时必定要注意上下文
6.单核手机上,即便非主线程处理,也要谨慎看是否能避开cpu的高 峰,不然界面同样卡,多核手机上cpu占用上60%也会卡
7. listveiw,adapter getview必定要用
viewholder,基本概念请掌握
8. 刷新界面必须在主线程,或者 postinvalidate,opengl必须在render线 程,不然会报错或者各类诡异问题
9.inflate是个耗时操做,尽可能避免, relativelayout比linearlayout快
1. 线程同步:Synchronized用法不当
致使ANR,wait方法使用不当致使ANR
2. 数据库db操做,不能多线程写 3. 数据库db操做,transaction的使用
4.有Exception抛出时,catch 后必定要有 log输出,不然后续有异常很难查找, outofmemory的父类不是Exception,因此 抓Exception是涵盖不了OOM的