Android面向面试复习----内存管理

内存管理

1. 内存管理机制概述

1. 分配机制

操作系统会为每个进程分配合理的内存大小,保证每一个进程能够合理的运行,而不至于内存不够用或者某个进程占用太多的内存。

2. 回收机制

系统内存不足时,会有一个合理的回收再分配内存的机制,保证新的进程能够正常运行。

2. Android内存管理机制

1. 分配机制

弹性内存分配:开始分配一个小的内存大小(根据物理设备的内存大小决定),等到当前内存不够使用时,会逐步分配更大的内存空间,但是有一个最大值。安卓系统是想让更多的应用进程能够存活到内存中,再次启动时,直接恢复进程而不需要再次启动进程,提升用户体验。

// 查看当前进程可以申请的最大内存
Runtime rt=Runtime.getRuntime();
long maxMemory=rt.maxMemory();

2. 回收机制

遵循一个宗旨:尽最大限度的使用。(继承linux),缺点:当进程不再使用的时候,内存中还会保存有该进程的数据。安卓在内存不够使用的时候会杀死其他进程给新进程使用,进程有优先级之分。

  • 前台进程(正在交互的进程)
  • 可见进程(可见但无法交互的进程)
  • 服务进程
  • 后台进程
  • 空进程(GC能够直接回收)
    (后台进程和空进程比较容易被回收)

3、 内存管理机制的特点

1. 更少的占用内存

体验更好,流畅

2. 在合适的时候,合适的释放系统资源

频繁的释放内存资源,会造成内存抖动,可能会引起anr,ui卡顿,oom等。

3. 在系统内存紧张的情况下,能释放掉大部分不重要的资源,来为Android系统提供可用的内存。

4. 能够很合理的在特殊生命周期中,保存或者还原重要数据,以至于系统能够正确的重新恢复该应用。

4. 内存优化方法

1. 当Service完成任务后,尽量停止它(使用Intentservice代替它,来做耗时操作,同时也能自动退出,而Service不会自动退出)

2、 在UI不可见的时候,释放掉一些只有UI使用的资源(OnTrimMemory优化)

参考:OnTrimMemory优化

3. 在系统内存紧张的时候,尽可能多的释放掉一些非重要资源

同上

4. 避免滥用Bitmap导致的内存浪费

加载合适的分辨率的图片;释放掉那些需要释放的图片;使用LruCache来缓存图片;合理使用软引用

5. 使用针对内存优化过的数据容器

SparseArray替代HashMap;尽量少用枚举(内存占用比正常常量大很多)

6. 避免使用依赖注入的框架

在运行时需要额外需要更多的内存

7. 使用ZIP对其的APK

运行时更少占用内存

8. 使用多进程

定位、推送、webview等,不过这是一把双刃剑。

5. 内存溢出VS内存泄露

1. 内存溢出

最有效的方式,优化图片:压缩图片,使用inBitmap,裁剪,回收

2. 内存泄露

使用Android Monitor;MAT; LeakCanary

你可能感兴趣的:(面试,Android,面试知识复习)