内存优化-service优化

本来以为公司的项目没有过多的图片处理,也涉及不到什么缓存处理,内存这一部分不是很重要直到有一天UI给我们开发一张高清背景图也没想过要处理结果导致内存平白无故增加了3,4十兆,随之而来的就是程序的各种崩溃各种OOM。
好了背景我就不多说了接下来我们说说内存优化的service优化。

1.首先让我们做个试验启动一个Activity没任何逻辑处理内存显示如下。
这里写图片描述
大家可以看到内存占有维持在1M左右,可以说相当的小。

2.接下来让我们启动个service并在里面做一些增加内存的处理。

//做耗内存操作
public int onStartCommand(Intent intent, int flags, int startId) {
        String aa = "sssssssqwezxczxczxczxc";
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < 100000; i++) {
            sb.append(aa);
        }
        Log.e("wwwwwwwwwwwwww", sb.toString());

        return super.onStartCommand(intent, flags, startId);
    }

下面是注册service的代码(很简单只有service的声明)

 <service android:name=".TestService"/>

这时候再看看内存使用情况
这里写图片描述

内存升到了16M对于突然增加的这15M左右的内存对手机来说是个很大的数字了。

3.接下来我们做个处理(在service定义时添加一个属性android:process=”:RequestService”)
:RequestService可以自己定义名字气什么名字无所谓重要的是要有个冒号。

 <service android:name=".TestService" android:process=":RequestService"/>

这时我们再看看内存的使用情况截图如下
这里写图片描述

内存又降到了之前的1M左右查看正在运行的应用可以看到我们的service依然正常运行
那android:process什么意思呢?
查了一些资料以及官方文档说明 android:process代表给这个service分配个单独的进程每个应用都有一个独立的进程当我们不设置这个属性的时候代表他要跟我们的应用共用一个进程这样的话我们的应用内存会被service占去一部分如果我们的service做太多耗内存的操作的话我们的程序很有可能会OOM,最恶心的是你还以为是你的出现OOM的界面问题导致查找半天不知道根源。

最后再补充一点如果我们设置了android:process属性后还需要再设置个属性 android:exported=”true”代表可以让我们的service能跟主进程进程间通信。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值