Managing Your App's Memory

 How Android Manages Memory

       内存是手机中非常重要的资源,虽然android的虚拟机会定期进行垃圾回收,但开发者还是需要了解何时何地分配以及释放内存;为了让垃圾回收器能够回收内存,你需要避免内存泄露(经常出现的原因是因为对象有全局对象的引用)以及及时释放引用对象;

       android系统使用内存映射或者分页机制管理内存,所以只有在释放了所有对象的引用后才能回收内存;
1, Sharing Memory
      android在进程之间共享内存;
      1) 所有android的进程都fork于Zygote, 这个进程是在系统启动过程中创建的,并加载了framework相关的代码,当子进程创建的时候,就共享相关的内存;
      2) android进程之间也可以分享内存;比如和合成器分享动态分配的内存;
2, android内存管理
      1) 每个进程的最大内存受到限制,当超过最大值时,会报OutOfMemoryError错误;
      2)android会将后台进程放置在LRU(least-recently used)的缓存中,这样可以提高应用切换速度,并根据管理策略回收内存;
How Your App Should Manage Memory
1,谨慎使用service
      当service任务完成,就不要让它一直运行,这样才能让它所在的进程退出;
      可以使用IntentService,它在service任务完成后会及时退出;
2,当所有的视图隐藏时,及时释放资源
     调用activity的ontrimMemory()释放资源,包括释放broadcast receivers以及网络连接等;这个回调和onstop的
区别是它是在所有进程中的视图都隐藏后才调用;
3,避免在Bitmap上浪费内存

     保存在内存中bitmap分辨率要符合需求,不要使用过高的分辨率浪费内存;

4,小心使用抽象类

      使用抽象会占用更多的内存

5,使用多进程

      要小心使用多进程,因为它有可能增加你的内存消耗而不是降低。

      在一个音乐播放器中,可以在另外一个进程播放音乐,这样的好处是当播放器到后台的时候可以释放ui进程所占用的内存;

      使用adb shell dumpsys meminfo com.example.android.apis:empty可以分析进程所占用的内存,其中的private dirty和 private clean是最重要的2个因素,当它们一直在增加的时候就是出现了内存泄露;


    

















你可能感兴趣的:(Managing Your App's Memory)