1.   Android端进程被杀死后,目前自带的保护后台接收消息活跃机制。暂时没有什么好的机制保持任何情况下都活跃

android原生系统用home键杀进程可以起来,如果是强行停止就只能用户自己手动开启应用

如果是miui等第三方应用,杀了进程默认无法自启动
如果是root过的原生系统,杀了进程也是没有办法起来的,这个时候推送是收不到的

如果是原生系统,没有root,只要不是强行停止,其他系统自带的停止方式都可以自启动,一般10s内恢复

目前已知以下第三方系统会影响到应用:
小米【MIUI】
        自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程无法开启
        通知栏设置:应用默认都是显示通知栏通知,如果关闭,则收到通知也不会提示

华为【Emotion】
        自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程不会开启,只能手动开启应用
        后台应用保护:需要手动把应用加到此列表,否则设备进入睡眠后会自动杀掉应用进程,只有手动开启应用才能恢复运行
        通知管理:应用状态有三种:提示、允许、禁止。禁止应用则通知栏不会有任何提醒

魅族【Flyme】
        自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程发开启
        通知栏推送:关闭应用通知则收到消息不会有任何展示

VIVO【Funtouch OS】
        内存一键清理:需要将应用加入【白名单】列表,否则系统自带的“一键加速”,会杀掉进程
        自启动管理:需要将应用加入“i管家”中的【自启动管理】列表,否则重启手机后进程不会自启。但强制手动杀进程,即使加了这个列表中,后续进程也无法自启动。

OPPO【ColorOS】
        冻结应用管理:需要将应用加入纯净后台,否则锁屏状态下无法及时收到消息

自启动管理:将应用加入【自启动管理】列表的同时,还需要到设置-应用程序-正在运行里锁定应用进程,否则杀进程或者开机后进程不会开启,只能手动开启应用

目前推送的保活机制基本上都是

一.依赖于系统广播的接收调用

常用的有:1.锁屏解锁广播2.网络状态改变广播3.安装包广播,卸载包广播4.存储器挂载卸载广播

android.intent.action.USER_PRESENT
android.net.conn.CONNECTIVITY_CHANGE
android.net.wifi.RSSI_CHANGED
android.net.wifi.STATE_CHANGE
android.net.wifi.WIFI_STATE_CHANGED

android.intent.action.MEDIA_UNMOUNTED
android.intent.action.MEDIA_REMOVED
android.intent.action.MEDIA_CHECKING
android.intent.action.MEDIA_EJECT

二.依赖于同一个手机上不同APP使用相同的SDK来相互拉起对方

通过LBE安全大师看QQ能通过个推,JPUSH,小米推送,微信开放平台接口广播,新浪SAE云推送,qq浏览器推送状态广播,手机QQ广播接收等多种推送方式相互唤醒

是否可以尝试按照QQ方式去实现。

尝试用com.tencent.mm包名,在魅族NOTE2上,在另外zzh中创建了个服务,服务里每隔一秒打印test,发现正常通过菜单关闭都可以继续执行,此时例子APP到缓存进程中继续运行,关闭缓存进程才彻底关闭。

QQ当我在魅族NOTE2上,把正在运行和缓存进程中的QQ杀掉后,并且没有其他QQ能唤醒的情况下,QQ也无法收到推送消息。

三.是否可以尝试依赖于某个手机自身的推送服务

逐个判断当前推送方式是否能成功,如果不能成功就换下种推送方式推送

或者在用户登陆APP后反馈登陆信息,根据反馈信息来首先使用当前手机得推送服务。

魅族没有自己的推送服务,此路不通

四.看到360手机助手怎么杀都杀不死

找到一个root的手机,如果不行就找个360一键root,adb shell进入后,执行su命令,当时root权限后,就进入到data/app中,把我需要的com.qihoo.appstore文件中base.apk复制到某个可以用文件夹(例如/mnt/sdcard/tmp)中,然后adb pull /mnt/sdcard/tmp c:\ 中,再通过反编译编译出代码,看看实现。

发现它有个deamon守护进程的库,libCoreDaemon.so看看怎么使用,发现一直无法加载该库,System.loadLibrary("CoreDaemon");报错,无法加载

1.尝试在魅族上使用微信的包名,发现通过菜单关闭APP,后台服务依然存在可以执行
2.反编译出360的JAVA代码,查看保活机制,没看懂,尝试使用它的第三方,发现无法加载
3.尝试集成了信鸽和JPUSH两个推送,发现存活率依然不高
4.尝试集成多个手机系统的消息推送,发现VIVO,魅族等没有推送服务
5.尝试闹钟唤醒,闹钟在5.1随着APP关闭也无效
6.GITHUB上找例子  JNI开启服务不行     前台服务也不行    双JAVA服务也不行
7.尝试ROOT后使用系统权限   没有ROOT方式,暂时没尝试
8.两个APP采用不同用户,一个关闭去拉起另外一个     暂时没有尝试
9.尝试微信或者QQ是否有广播,可以唤醒我们APP      没有发现什么广播可以唤醒
10.尝试单独起个接收器,接收所有推送的守护进程广播,来启动我们自己的服务  LBE显示有相互唤醒路径,但是没有唤醒服务   没有唤醒

在上面基本上又做了新的尝试

问题点1.JNI运行在哪里   启动服务  确认下通过任务管理器关闭掉APP后C进程是否存在
动态链接库文件,是一种不可执行的二进制程序文件,它允许程序共享执行特殊任务所必需的代码和其他资源,只是加载到内存一种资源文件,仅测试和java属于同一个进程,不同线程
java虚拟机类似于一个沙箱,应用程序进程共享zygote的同一套JAVA核心库,Android的进程和线程其实是和liunx进程管理保持一致,Android里fork创建进程,clone创建线程
am startservice -n com.uhealth.member/cn.jpush.android.service.DaemonService 包名/类名
推送是通过
am startservice -a cn.jpush.android.intent.DaemonService 相互唤醒
魅族把静态注册广播接收器进程没启动时,不给启动,也就是自启动管理设置的
服务:
packageManagerService解析APK,负责安装,及/data下目录生产,并在内存存储了所有组件的信息(Acitivity,Service),并对外提供数据查询
ActivityManagerService  管理ActivityRecord和TaskRecord,processRecord,并根据uid和processname去看是否需要创建新的进程,创建新进程是发消息给zygote,给新进程绑定Application,然后最后启动Activity或Service
问题点2.自启动试试是否可以      
Flyme3.1设置开机自启:可以在设置—应用控制—开机启动进行设置。
Flyme4.0设置开机自启:可以在设置—应用管理—(点击需设置的软件)—权限管理—自启动,点击即可关闭或打开。  打开自启动确实可以重启
所谓的自启动管理,就是把静态注册的广播接收器进程没启动时无法接收广播,当DEMO程序自启动打开时,收到发送广播也会自动启动
对外暴露的服务是可以通过广播启动

问题点3:

尝试生成子进程的子进程,然后把子进程杀掉,看是否可以形成360的依赖于init的子进程特例
360并不是通过生成子进程,然后杀掉父进程来连接上的
通过JAVA层新建2个进程,2个进程里2个JAVA服务,一个java服务service1去唤醒另外一个JAVA服务service2,service2里会启动一个C线程,并创建其子进程,然后通过命令杀掉service2所在的进程,此时子进程就成为了init的子进程,子进程一直在运行,然后通过任务管理器关闭DEMO程序,没有自启动

转自:http://blog.csdn.net/z157794218/article/details/51657444

Android APP切换到后台接收不到推送消息的更多相关文章

  1. IOS 在不打开电话服务的时候,可以响应服务器的推送消息,从而接收服务器的推送消息

    在做即时通讯(基于xmpp框架)的时候遇到这样一个问题,就是在真机测试的时候,你按Home键返回桌面,在你返回桌面的时候,这是你的程序的挂起状态的,在你挂起的时候, 相当于你的程序是死的,程序的所有进 ...

  2. [FMX]将 Android 程序切换到后台及从后台切换到前台实现

    有时候,我们需要将自己的Android程序切换到后台运行,在必要时,将其切换到前台运行.下面提供了一种实现方式,首先需要引用三个单元:   1 uses Androidapi.JNI.App,Andr ...

  3. android系统和ios系统是如何实现推送的,ios为什么没有后台推送

    ios系统为什么没有后台推送? iOS 为了真正地为用户体验负责,不允许应用在后台活动.有了这个限制,但是对于终端设备,应用又是有必要“通知”到达用户的,随时与用户主动沟通起来的(典型的如聊天应用). ...

  4. Android:开机自启动并接收推送消息

    接收推送消息部分我们通过ZeroMQ实现,可以参考http://www.cnblogs.com/ilovewindy/p/3984283.html. 首先是开机自启动的功能实现,代码如下:1.     ...

  5. 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)

    这次公司要我们做一个功能,就是当用户成功注册以后,他登录以后要收到消息,当然这个消息是安装了我们的手机APP应用的手机咯. 极光推送的网站的网址是:https://www.jpush.cn/ 极光推送 ...

  6. 最新的极光推送服务器端代码(java服务器后台向手机端自定义推送消息)

    一共两个类 一个Jdpush  一个JpushClientUtil 代码如下   注解都写的很清楚 package com.sm.common.ajpush; import org.slf4j.Log ...

  7. Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

    Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...

  8. 极光推送经验之谈-Java后台服务器实现极光推送的两种实现方式

    原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6439313.html Java后台实现极光推送有两种方式,一种是使用极光推送官方提供的推送请 ...

  9. Android应用实现Push推送消息原理

            本文介绍在Android中实现推送方式的基础知识及相关解决方案.推送功能在手机开发中应用的场景是越来起来了,不说别的,就我 们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅 ...

随机推荐

  1. 主流RPC框架详解,以及与SOA、REST的区别

    什么是RPC RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. 简言之,RPC使 ...

  2. 一个简单的例子学会github repository的webhook

    github的webhook是个有用的功能,允许开发人员指定一个服务器的url.当开发者对github仓库施加操作,比如提交代码,创建issue时,github网站会自动向该url指定的服务器推送事件 ...

  3. ABAP下载的病毒扫描Virus Scan

    当我使用CL_HTTP_ENTITY=>IF_HTTP_ENTITY~GET_DATA从网络下载数据时,遇到异常CX_VSI: 错误原因是数据从网络下载到Netweaver服务器上之后,在服务器 ...

  4. java 使用POI导出百万级数据

    先看结果吧,这只是测试其中有很多因数影响了性能. 表总数为:7千多万,测试导出100万 表字段有17个字段 最终excel大小有60多兆 总耗时:126165毫秒 差不多2分多钟 其核心简单来说就是分 ...

  5. Django获取用户form表单

    首先创建一个Django 的工程项目 前面我们说过了,那到一个项目首先把模板路径,和静态路径在settings.py设置好以后,在开始写代码,写代码也要按照我们以前说的那个工程目录结构写. 现在我们做 ...

  6. sql查询数据结果发送到邮箱

    #!/bin/bash user=root password=xx dbname=xx DATE=`date +%F` #注意:此处mysql要用全路劲,否则计划任务会执行失败 /mydata/mys ...

  7. Pycharm建立web2py项目

    web2py是一种免费的,开源的web开发框架,用于敏捷地开发安全的,数据库驱动的web应用:web2p采用Python语言编写,并且可以使用Python编程.web2py是一个完整的堆栈框架,也就是 ...

  8. 如何用win10自带linux系统学习c语言---解决gdb使用问题

    1.windos store---ubuntu18 2.改安装源 3.装gcc   apt-install 即可 4.装gdb       apt-instll 即可 5.写helloworld 记做 ...

  9. CentOS 6 多实例 编译安装mariadb-5.5.59

    系统平台: CentOS release 6.9 (Final) 内核 2.6.32-696.el6.x86_64 1.去官网下载适合的源码包 http://mariadb.org/ mariadb- ...

  10. linux基础_使用指令2

    1.cat指令 功能:查看文件内容,是以只读的方式打开. 语法:cat [] 要查看的文件 选项: -n:显示行号 末尾加 | more:分页 使用细节: cat只能浏览文件,而不能修改文件,为了浏览 ...