[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);android

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

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

方法三:START_STICKYui

在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去掉。内存

Android中的进程是托管的,当系统进程空间紧张的时候,会依照优先级自动进行进程的回收。Android将进程分为6个等级,它们按优先级顺序由高到低依次是:get

   1.前台进程( FOREGROUND_APP)
   2.可视进程(VISIBLE_APP )
   3. 次要服务进程(SECONDARY_SERVER )
   4.后台进程 (HIDDEN_APP)
   5.内容供应节点(CONTENT_PROVIDER)
   6.空进程(EMPTY_APP)后台


方法五:1 像素在前台
qq的黑科技service

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

相关文章
相关标签/搜索