Ui卡顿及内存管理

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 谨慎使用多进程

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,812评论 25 709
  • java 接口的意义-百度 规范、扩展、回调 抽象类的意义-乐视 为其子类提供一个公共的类型封装子类中得重复内容定...
    交流电1582阅读 2,311评论 0 11
  • HereAndroid的内存优化是性能优化中很重要的一部分,而避免OOM又是内存优化中比较核心的一点。这是一篇关于...
    HarryXR阅读 3,861评论 1 24
  • 这两天我发现一个很有规律的变化,就是人醒了,但是小闭上眼,然后脑袋里做什么那个大脑里面的东西非常的丰富,梦里面的愿...
    桂枷阅读 102评论 0 0
  • 每次周五七点的班总是有孩子早早来来到,各种问候,各种一周未见的兴奋溢于言表,每次这个时候,总是让人很窝心,虽然气...
    Lucas88阅读 244评论 0 0