为什么要进行内存优化?

1.App运行内存限制,OOM导致App崩溃

2.App性能:流畅性、响应速度和用户体验

Android的内存管理方式

Android系统内存分配与回收方式

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

可以通过下面的命令在终端来查看Android系统进程和内存分配

adb shell:进入Android底层Linux系统命令

ps: 查看系统进行的命令

dumpsys meminfo 进程名:查看内存分配

●   GC只在Heap剩余空间不够时才会触发垃圾回收机制

App内存限制机制

●   每个App分配的最大内存限制,岁不同设备而不同

●   吃内存大户:图片

切换应用时后台清理机制

●   App切换时采用的是LRU Cache算法

LRU算法:最近使用的排在最前面,最少可能被清理掉

●    onTrimMemory()回调方法

当系统的内存有变化的时候,会发出这个回调方法给各个应用,当应用收到这个回调时,释放内存。

监控内存的几种方法

方法1:通过代码查看


方法2:Android Studio的自带工具Android Monitor来查看App整体内存变化


方法3:Android Studio Tools → Android → Android Device Monitor启动设备监控


Android App内存优化方法

数据结构优化

1.频繁字符串拼接用StringBuilder

2.ArrayMap、SparseArry替换HashMap,内存使用更少,效率更高

3.内存抖动

内存抖动是指在短时间内有大量的对象被创建或者被回收的现象。内存抖动出现原因主要是频繁在循环里创建对象,导致大量对象在短时间内被创建,由于新对象是要占用内存空间的,如果一次或者两次在循环里创建对象对内存影响不大,不会造成严重内存抖动,这样可是以接受也是不可避免的,如果是频繁创建对象的话,内存抖动就会很频繁,频繁的内存抖动,会导致垃圾回收机制频繁运行(短时间内产生大量对象,需要大量内存,而且还是频繁抖动,就可能会需要回收内存以用于产生对象,垃圾回收机制就自然会频繁运行了)。

4.再小的Class也会耗费0.5KB

对象复用

1.复用系统自带的资源

2.ListView/GridView的ConvertView复用

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

避免内存泄漏

1.内存泄漏会导致剩余可用Heap越来越少,频繁触发GC

2.尤其Activity泄漏

3.用Application Context而不是Activity Context

4.注意Cursor对象是否及时关闭

OOM问题优化

OOM问题分析

OOM的绝大部分都是跟图片相关的

强引用、软引用的意义

String strongRef = String.valueof(Math.random());String softRef = new SoftReference(String.valueof(Math.random()));

如果内存不够,强引用在生命周期内是不会被回收的,而软引用是可以被GC回收的。

优化OOM问题的方法

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

2.避免Bitmap的浪费

3.Try catch某些大内存分配的操作

4.加载Bitmap:缩放比例、解码格式、局部加载


更多相关文章

  1. Mars Android视频学习笔记——01_16_SQLite使用方法
  2. Android中Intent传递对象的两种方法(Serializable,Parcelable)!
  3. 近距离端详Android(安卓)ART运行时库
  4. android机制系列之七 Android(安卓)Camera API1架构之一 Camera
  5. Android窗口抖动之动画实现
  6. 详解Android中实现热更新的原理
  7. 关于Android堆内存的设置
  8. Android之——性能与内存优化
  9. Android(安卓)Fragment重叠问题

随机推荐

  1. Android(安卓)Bluetooth 总结
  2. Hello Android(安卓)- 调用打电话和发短
  3. 【Parallax Animation】实现知乎 Android
  4. 当ListView为空时显示提示语
  5. Android开发之Thread类分析
  6. 高亮显示一个技巧
  7. Android(安卓)风格和主题
  8. Android(安卓)Socket 中文乱码
  9. Android开机启动Activity或者Service方法
  10. 学习BroadcastReceiver