UI 卡顿原因分析
1 人为在UI线程中做轻微耗时操作,导致UI线程卡顿。
2 布局Layout 过于复杂,无法在16ms内完成渲染。
3 同一时间动画执行的次数过多,导致CPU或者GPU负载过重。
4 view过度绘制,导致某些像素在同一帧时间内被绘制多次,从而使CPU或者GPU负载过重
5 view频繁的触发measure,layout,导致measure layout累计耗时过多及整个view频繁的重新渲染。
6 内存频繁出发GC过多,导致暂时阻塞渲染操作。
7 冗余资源及逻辑导致加载和执行缓慢
8 ANR
解决方法
1 布局优化
2 列表及adapter优化 滑动结束才加载
3 背景和图片等内存分配优化
4 避免ANR
内存管理 分为 内存分配和回收管理内存
管理机制的特点
1 更少的占用内存
2 在合适的时候,合理的释放系统资源
3 在系统内存紧张的情况下,能释放掉大部分不重要的资源,来为Android 系统提供可用的内存
4 能够很合理的在特殊的生命周期中,保存或者还原重要数据,以至于系统正确的重新恢复该应用
内存优化方法
1 当Service 完成任务时,尽量停止它,或者使用intentService
2 UI不可见时,释放掉一些只有UI使用的资源 ontrimMemory
3 在系统内存紧张的时候,尽量释放一些不重要的资源 ontrimMemory
4 避免滥用bitmap 导致的内存浪费
5 使用针对内存优化过的数据容器 parseInteger 不用枚举类
6 避免使用依赖注入的框架
7 使用ZIP 对齐的apk
8 使用多进程 消耗内存过大或者需要长期在后台运行的模块
内存泄漏
1 不恰当的单例模式
2 匿名内部类
3 handler (改成静态内部类,弱引用的方式持有对象 removemessage)
4 避免使用static 变量(懒加载)
5 资源未关闭
6 AsyncTask造成的内存泄漏
7 bitmap的recycle
8 listview优化
解决OOM
1 bitmap
a 图片显示 选择大小合适的尺寸
b 及时释放内存 bitmap的recycle 可释放native
c 图片压缩 insamplesize
d inBitmap bitmap内存复用
e 捕获异常 outOfMemoryError
2 其他方法
a listview的view 复用 大图使用lru 缓存b 避免在ondraw 中创建对象
c 谨慎使用多进程