[Android]android Service后台防杀

Posted 小魔仙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Android]android Service后台防杀相关的知识,希望对你有一定的参考价值。


网上有很多办法,
方法一:在JNI里面fork出子进程
service在单独的进程中,在service中调用JNI的代码,然后fork出一个进程,然后让我们的service进程和fork出来的子进程一直运行.
在5以下是可以的,在5以上无效,
5.0的代码:
Process.killProcessQuiet(app.pid);
Process.killProcessGroup(app.info.uid, app.pid);
4.3的代码:
Process.killProcessQuiet(pid);

http://www.aichengxu.com/view/2402010

方法二:使用推送
在app中集成小米/友盟/Jpush/信鸽推送,在推送的service中监听要守护进程的情况。
所以,正确的推送方案都是应该如此(不是系统推送,App杀掉都是起不来的)
1.第三方推送方案+小米推送+华为推送(两个系统推送去唤醒 普通推送)
2.如果你是支持国外的应用,记得把,GCM也加上

方法三:START_STICKY

android中,我们使用startService启动服务。在Service的派生类里,会调用onStartCommand(Intent,int,int)来启动服务。
onStartCommand有三种返回值:
START_STICKY:

使用这个返回值时,我们启动的服务跟应用程序"粘"在一起,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务。当再次启动服务时,传入的第一个参数将为null;
START_NOT_STICKY:使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。
START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
方法四: startForeground
后台运行的服务,被各种手机卫士和内存清理工具一清理或者onLowMemory时就被强行kill掉,有可能是系统回收内存的一种机制,要想避免这种情况可以通过startForeground让服务前台运行,当stopservice的时候通过stopForeground去掉。
方法五:1 像素在前台
qq的黑科技

但是好像以上方法小米手机都不行。。。使用推送的话,一断网就完蛋了...

以上是关于[Android]android Service后台防杀的主要内容,如果未能解决你的问题,请参考以下文章

Android开发中关闭service的问题

Android activity等待service数据后再执行

Android 启动后台运行程序(Service)

如何防止android应用中的service被系统回收

Android Service详解

android:当Activity和Service 都被销毁后,如何控制其中生成的线程?