2 cufelsd cufelsd 于 2016.04.01 18:32 提问

关于android app后台防杀问题 3C

app是一个测量运动数据的应用,主要是在用户跑步的时候手机锁屏app也能正常运行,不被系统或第三方清理工具杀掉,有什么好的解决办法吗??不是流氓软件。。。
网上有很多办法,
方法一:在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的黑科技

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

4个回答

luochoudan
luochoudan   Ds   Rxr 2016.04.01 20:00

不被系统或第三方清理工具杀掉,这还不是流氓软件?方法三和四最简单,可以尝试一下。

CSDNXIAOD
CSDNXIAOD   2016.04.06 17:01

android app name 有问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

CSDNXIAON
CSDNXIAON   2016.04.06 17:01

android app name 有问题
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

SEU_Calvin
SEU_Calvin   2016.10.30 19:49
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!