Sander Lee 2016-04-01 10:32 采纳率: 33.3%
浏览 2472
已结题

关于android app后台防杀问题

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的黑科技

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

  • 写回答

2条回答

  • 丑旦 2016-04-01 12:00
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog