Android多进程

使用多进程原因:

·防止系统资源紧张(OOM)

·防止应用架构臃肿(WebView、推送、后台服务)

OOM

OOM(内存溢出):是因为应用所需要分配的内存超过系统对应用内存的阈值,而抛出的 java.lang.OutOfMemoryError错误。 OOM的根本原因是开发者对内存使用不当造成的。

Android系统仅会在新的内存分配之前判断Heap的尾端剩余空间是否足够,如果不够就会触发GC操作,从而腾出更多空闲的内存空间。为了整个Android系统的内存控制需要,Android系统为每个应用程序都设置了一个硬性的 DalvikHeapSize最大限制阈值,这个阈值在不同的设备上回因为RAM大小不同而有所差异。如果你的应用占用内存空间已经接近这个阈值,此时再尝试分配内存的话,很容易引起 OutOfMemoryError的错误。

// 获取Heap Size阈值

ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);

// 返回值是以Mb为单位

int memoryClass = am.getMemoryClass();

只要allocated + 新分配的内存 >= getMemoryClass()的时候就会发生OOM

如何避免OOM:

· 尽量减少新分配出来的对象占用内存的大小,尽量使用更加轻量级的对象;

· 使用更加轻量的数据结构(比如使用 ArrayMap/ SparseArray替代HashMap等传统数据结构);

·避免在Android里面使用枚举;

·减小Bitmap对象的内存占用(可以通过缩放避免不必要的大图载入或者选择不同的解码格式);

·避免在onDraw方法里面执行对象的创建(类似onDraw等频繁调用的方法,一定需要注意避免在这里做创建对象的操作,因为它会迅速增加内存的使用,而且很容易引起频繁的GC,甚至是内存抖动。)

·当代码中需要使用到大量的字符串拼接操作,就有必要考虑使用StringBuilder来代替频繁的“+”;

· 避免对象的内存泄漏(内存对象的泄漏,会导致一些不再使用的对象无法及时释放,这样很容易导致后续需要分配内存的时候,空闲空间不足而出现OOM。显然,这还使得每级Generation的内存区域可用空间变小,GC就会更容易被触发,容易出现内存抖动,从而引起性能问题。)关于内存泄漏,主要有以下几点:

(1) 注意Activity的泄漏(内部类引用导致Activity的泄漏或者Activity Context被传递到其他实例中,这可能导致自身被引用而发生泄漏。);

(2)注意临时Bitmap对象的及时回收 ;

(3)注意监听器的注销(手动add的listener,需要记得及时remove这个listener);

跨进程IPC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值