关于android service有可能被系统杀死的问题。

      我做下载管理功能,继承了IntentService,用户点击全部下载时有可能是几十个视频,下载完一个会自动下载第二个,我希望退出应用后下载可以继续进行,但我发现我的service有可能被系统杀死,被系统杀死后下载状态就一直那样了,下载进度啊 ,下载速度啊,因为一些我的一些操作在service中的,所以service死掉后,这个类里的操作也都不好使了,被系统杀死的service还不触动任何回调方法,onDestroy我在试验中这个方法是没有调用的,如果调用就可以做一些处理,那么我在想怎么不让service被销毁呢,从网上找答案千篇一律。

    1:提高service等级<intent-filter android:priority="1000"></intent-filter> 我试过不好使。

    2:startForeground(0, new Notification());使进程运行于前台,这个我试了也没好使,不知道为什么,网上说2.3以后好使,我用的sdk4.0。

    3:使app安装在sysytem下 这样是系统应用,不会被杀死,这个我没搞明白,但像360等软件,不是用这个方式的,所以我没想就排除掉了这方式。

    4:说在onDestroy方法里重启服务,可是我的貌似没有走onDestroy方法。

    5:onStartCommand方法,返回START_STICKY和START_REDELIVER_INTENT 这个START_REDELIVER_INTENT的解释是:在运行onStartCommand后service进程被kill后,系统将会再次启动service,并传入最后一个intent给onstartCommand 这个对于intentservice 非常好,稍加修改重启后能做到续传下载,可是当服务没响应了,我看手机正在运行的程序也没有我这个应用了,这个已然没起到作用。

      后来搜到一个文章说微信的service一直可以运行是因为微信一直没有退出,又看的android 进程分为六种,在我测试中发现,我下载中退出程序,service就有肯能被杀死,我不退出程序,那么他是前台进程就不会被杀死,不知道startForeground(0, new Notification())这个方法怎么不好用,还是我用的方式不对,其实原理来说这个是个好的解决方式。

     最后我想到一种简单的不太完美的解决方式,在退出应用时先检查是否有视频在下载,如果没有则finish(); 如果有执行下面代码:

     Intent i = new Intent(Intent.ACTION_MAIN);
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     i.addCategory(Intent.CATEGORY_HOME);
     startActivity(i);  

   相当于按了home键 一个前台进程按了home键应该变成了后台进程了,怎么就会不被系统杀死了呢,不明白,难道主activity不finish()就一直属于前台进程,总之测试了几个小时,service在也没被杀死过,貌似解决了我的问题,当然当下载完任务intentservice会自动销毁,这时退出就可以finish();了,没有太深入研究了,希望研究过朋友告诉我真正的答案。

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值