-
非静态内部类导致的内存泄漏
例如:Handler内部类,四大组件的Context
-
过渡绘制
-
自定义View中
TypedArray
未关闭 -
IO操作之后没有关闭
-
频繁的回调中创建实例
- 1秒内刷新的帧数越接近60越好。
- 启动时间
- 占用内存
- 功耗
- APK体积
- 开发者选项中的GPU过渡绘制
- 紫色 1X
- 绿色 2X
- 橘色 3X
- 红色 4X
- Android Studio中的静态代码检查工具
- Android Monitor
- 要有足够多的测量,不能凭感觉
- 要尽量使用低配置的设备进行测试
- 不能过度优化
- 内存抖动 -> 导致频繁的GC
- 过度绘制 -> 丢帧
- UI线程做了耗时操作
- 内存不足(系统原因)
避免在循环中申请局部变量
-
在布局文件中使用标签,只用于根布局,并且根布局是
FrameLayout
的时候,解决相同布局嵌套产生的过度绘制 -
在布局中使用
ViewStub
,一个懒加载的ViewGroup
,并且这个布局的inflate
不能在子线程中执行,否则会返回null
,而且只能实例化一次 -
使用进行占位
-
去掉
widnow
的默认背景,在自定义主题的时候,android:windowBackground
设置为@null
。每个Activity
要有默认的背景(解决window
和Activity
同时有背景的问题)
优化Activity
和Application
的onCreate()
中的流程,能异步就异步
- 使用完IO操作立即关闭文件
- 合理的定义缓存大小(建议是应用所占内存的1/8)
- 尽量避免创建大对象和大量的对象
- 程序中用到的图片放在合适的
drawable
文件夹下
频繁的网络访问、频繁的界面刷新
对于网络访问,尽量使用缓存,有必要的话建立长连接
减少循环动画的使用,使用触发式动画
- 使用一套图片资源,建议使用720p的资源,放在xxdpi
- 对图片进行压缩(tinypng.com)
- 不使用alpha的png可以使用jpg来代替
- so库可以放弃x86
- 资源混淆
- 插件化