1.Android端进程被杀死后,目前自带的保护后台接收消息活跃机制。暂时没有什么好的机制保持任何情况下都活跃
android原生系统用home键杀进程可以起来,如果是强行停止就只能用户自己手动开启应用
如果是miui等第三方应用,杀了进程默认无法自启动如果是root过的原生系统,杀了进程也是没有办法起来的,这个时候推送是收不到的
如果是原生系统,没有root,只要不是强行停止,其他系统自带的停止方式都可以自启动,一般10s内恢复
目前已知以下第三方系统会影响到应用:小米【MIUI】自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程无法开启通知栏设置:应用默认都是显示通知栏通知,如果关闭,则收到通知也不会提示华为【Emotion】自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程不会开启,只能手动开启应用后台应用保护:需要手动把应用加到此列表,否则设备进入睡眠后会自动杀掉应用进程,只有手动开启应用才能恢复运行通知管理:应用状态有三种:提示、允许、禁止。禁止应用则通知栏不会有任何提醒魅族【Flyme】自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程发开启通知栏推送:关闭应用通知则收到消息不会有任何展示VIVO【FuntouchOS】内存一键清理:需要将应用加入【白名单】列表,否则系统自带的“一键加速”,会杀掉进程自启动管理:需要将应用加入“i管家”中的【自启动管理】列表,否则重启手机后进程不会自启。但强制手动杀进程,即使加了这个列表中,后续进程也无法自启动。OPPO【ColorOS】冻结应用管理:需要将应用加入纯净后台,否则锁屏状态下无法及时收到消息
自启动管理:将应用加入【自启动管理】列表的同时,还需要到设置-应用程序-正在运行里锁定应用进程,否则杀进程或者开机后进程不会开启,只能手动开启应用
目前推送的保活机制基本上都是
一.依赖于系统广播的接收调用
常用的有:1.锁屏解锁广播2.网络状态改变广播3.安装包广播,卸载包广播4.存储器挂载卸载广播
android.intent.action.USER_PRESENTandroid.net.conn.CONNECTIVITY_CHANGEandroid.net.wifi.RSSI_CHANGEDandroid.net.wifi.STATE_CHANGEandroid.net.wifi.WIFI_STATE_CHANGED
android.intent.action.MEDIA_UNMOUNTEDandroid.intent.action.MEDIA_REMOVEDandroid.intent.action.MEDIA_CHECKINGandroid.intent.action.MEDIA_EJECT
二.依赖于同一个手机上不同APP使用相同的SDK来相互拉起对方
尝试用com.tencent.mm包名,在魅族NOTE2上,在另外zzh中创建了个服务,服务里每隔一秒打印test,发现正常通过菜单关闭都可以继续执行,此时例子APP到缓存进程中继续运行,关闭缓存进程才彻底关闭。
三.是否可以尝试依赖于某个手机自身的推送服务
逐个判断当前推送方式是否能成功,如果不能成功就换下种推送方式推送
或者在用户登陆APP后反馈登陆信息,根据反馈信息来首先使用当前手机得推送服务。
魅族没有自己的推送服务,此路不通
四.看到360手机助手怎么杀都杀不死
找到一个root的手机,如果不行就找个360一键root,adbshell进入后,执行su命令,当时root权限后,就进入到data/app中,把我需要的com.qihoo.appstore文件中base.apk复制到某个可以用文件夹(例如/mnt/sdcard/tmp)中,然后adbpull/mnt/sdcard/tmpc:\中,再通过反编译编译出代码,看看实现。
发现它有个deamon守护进程的库,libCoreDaemon.so看看怎么使用,发现一直无法加载该库,System.loadLibrary("CoreDaemon");报错,无法加载
在上面基本上又做了新的尝试
问题点3:
尝试生成子进程的子进程,然后把子进程杀掉,看是否可以形成360的依赖于init的子进程特例360并不是通过生成子进程,然后杀掉父进程来连接上的通过JAVA层新建2个进程,2个进程里2个JAVA服务,一个java服务service1去唤醒另外一个JAVA服务service2,service2里会启动一个C线程,并创建其子进程,然后通过命令杀掉service2所在的进程,此时子进程就成为了init的子进程,子进程一直在运行,然后通过任务管理器关闭DEMO程序,没有自启动