使APP不容易被干掉(未测试)

服务不至于轻易得被系统给回收掉(有一个最绝对的方法就是把自己的应用设置为常驻内存,在Application中加入
android:persistent="true" 
这样即使内存低被回收,也会马上自启动,我们再作相应处理即可)。在AndroidManifest.xml文件中做了如下处理:
<receiver
    android:name="com.way.weather.WeatherWidget"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        <action android:name="android.intent.action.USER_PRESENT" />
    </intent-filter>

    <meta-data
        android:name="android.appwidget.provider"
        android:resource="@xml/weather_widget_4x2" />
</receiver>
多了一个android.intent.action.USER_PRESENT事件的监听,其实他是监听系统唤醒的广播,当系统在睡眠的时候,我们的服务最容易被回收,所以,监听这个广播,当系统唤醒时,重新启动一下这个服务。会使得这个服务变得比较顽强一点。我测试了3天左右,都没出现服务干掉的情况。

比较可靠的方法:使用Marsdaemon

这是一个轻量级的库,配置几行代码,就可以实现在android上实现进程常驻,也就是在系统强杀下,以及360获取root权限下,clean master获取root权限下都无法杀死进程
支持系统2.3到6.0
支持大部分设备,包括三星,华为,oppo,nexus,魅族等等
可以简单对开机广播进行保护
正文:
Marsdaemon配置需要三步:
1、明确自己需要常驻的进程service,创建一个和他同进程的receiver,然后在另外一个进程中创建一个service和一个receiver,并写在Manifest中。进程名可以自定义
见/MarsDaemon/DemoMarsdaemon/src/main/AndroidManifest.xml
这里写图片描述
service1是应用中有业务逻辑的需要常驻进程的service,其他三个组件都是额外创建的,里面不要做任何事情,都是空实现就好了
2、用你的Application继承DaemonApplication,然后在回调方法getDaemonConfigurations中返回一个配置,将刚才注册的进程名,service类名,receiver类名传进来。
代码/MarsDaemon/DemoMarsdaemon/src/main/java/com/marswin89/marsdaemon/demo/MyApplication1
这里写图片描述
此时如果你想在自己的application里面复写attachBaseContext方法的话,发现他已经被写为final,因为我们需要抢时间,所以必须保证进程进入先加载Marsdaemon,如果你想在attchBaseContext中做一些事情的话,可以复写attachBaseContextByDaemon方法。
如果你的Application已经继承了其他的Application类,那么可以参考Appliation2,在Application的attachBaseContext的时候初始化一个DaemonClient,然后调用他的onAttachBaseContext同样可以实现,当然了,他同样需要一个配置来告诉他我们刚才在menifest中配的信息
代码代码/MarsDaemon/DemoMarsdaemon/src/main/java/com/marswin89/marsdaemon/demo/MyApplication2
这里写图片描述
3、第三步就是尝试去杀掉进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值