zoukankan      html  css  js  c++  java
  • [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去掉。

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

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


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

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

  • 相关阅读:
    闭包 (Closure)
    RSA算法
    HTTPS
    SSH
    HDU1754 I hate it_线段树(入门级别)
    HDU1166 敌兵布阵_线段树
    c++运算符优先级表
    归并排序练习.
    HDU 1969 精度二分
    uva10944 状态压缩bfs or DP
  • 原文地址:https://www.cnblogs.com/xiaomoxian/p/5358252.html
Copyright © 2011-2022 走看看