android 内存管理以及优化 粗略方案

Android的内存管理方式

1.android系统内存分配和回收方式

一个app通常就是一个进程对应一个虚拟机

通过adb shell 查看应用的内存分配情况

①通过ps来查看系统内的进程

②通过 dumpsys meminfo 包名  查看对应的应用的内存分配情况

GC只在heap剩余空间不够的时候才触发垃圾回收,GC触发的时候,所有的线程都是会被暂停

2.app内存限制机制

每一个app分配的最大内存限制,随着不同的设备而不同

吃内存大户:图片

扫描二维码关注公众号,回复: 4073762 查看本文章

为什么要限制:为了平衡所有的app能够正常运行

3.切换应用时后台app清理机制

App切换的时候的LRU Cache

onTrimMemory()回调方法

4.监控内存的几种方法

AS代码

Float totalMemory = Runtime.getRuntime().totalMemory()

AS工具  Tools ->Android -> Android device monitor

需要注意的是data object class object的数据

APP内存优化方法

1.数据结构优化
频繁字符串拼接用StringBuilder  性能相差不止一点....StringBuilder的拼接碾压String的拼接

Arraymap,SparseArray替换HashMap

内存抖动(影响流畅性)

再小的Class耗费0.5KB

HashMap一个entry需要额外占用32B

2.对象复用

复用系统自带的资源

ListView/GridViewConvertView复用

避免在onDraw方法里面执行对象的创建

3.避免内存泄漏

由于代码瑕疵,导致这块内存,虽然是停止不用了,但依然被其他东西引用着,使得GC没法对它进行回收

内存泄漏会导致剩余可用的Heap越来越少,GC越来越频繁,影响流畅性

尤其Activity泄漏

Application Context而不是Activity Context

4.OOM问题优化

OOM的必然性和可解决性

OOM的绝大部分发生在图片

强引用和软引用的意义

5.优化OOM的方法

注意临时Bitmap对象的及时回收

避免Bitmap的浪费

Try Catch某些大内存分配的操作

加载bitmap:缩放比例,解码格式,局部加载

猜你喜欢

转载自blog.csdn.net/weixin_37699212/article/details/76177347