怎么保证能实时收到推送消息?
  1. 应用需要有一个常驻的后台进程,能够实时处理服务器发过来的推送消息。
  2. 通过系统级推送服务来推送消息,这种做法应用不需要实现一个常驻的后台进程
现状

  按理说如果有一个统一的系统级推送,大家都接入该服务那么就能解决问题了。其实google也提供了这样的服务GCM,但是因为国内无法使用google的原因GCM在国内是行不通的,所以外国人在使用android手机时正常不会有推送问题,而且手机运行也会比较流畅,主要原因就是国内软件开发商为了保证自己的推送消息能够即时收到都会实现一个常驻后台进程,过多的后台进程自然会占用系统资源拖慢手机速度
  不过,工信部已经联合了国内多家厂商要做统一推送服务,如果那一天真的到来那么对于广大国内开发者将会受益巨大。

解决方案

  目前解决推送问题通用的解决办法是采用混合推送机制,对于有提供系统推送的厂商走厂商推送,其余的走三方推送。
  提供系统级推送的厂商有小米,华为,魅族,不过厂商的推送正常只有在各自厂商的手机有效,所以sdk需要同时接入多个厂商的推送,然后根据机型去判断要走哪个厂商的推送。
  对于没有提供系统级推送的厂商那么只能自己通过保活机制维持一个常驻后台进程来实现。不过厂商为了系统纯净对后台进程做了严格限制,导致目前的进程保活机制面临几乎无解的问题。

问题所在

  进程保活受到厂商或者系统限制。

进程保活实现原理

  进程保活原理基本可以概括为两点:

  1. 尽量让进程不被杀掉
  2. 进程杀掉后能够重启

  关于进程保活我就不细说了,大家可以自己去了解,我这里只说实现进程保活面临的问题。

进程保活机制的问题

  进程被杀后唤醒有几种实现机制:

  1. 设置自启动的Service。当Service被杀后会立马重启。

  2. 通过应用进程间互相唤醒。接入同一个推送sdk的所有应用只要有一个应用启动就会唤起其他应用。

在实际开发中会发现进程唤醒机制在大部分情况下都不起作用了。主要有几个原因:

  1.即使设置了自启动Service,目前在大部分手机上应用被杀后是没办法重启的,原因是自启动权限被禁。可能大家会纳闷为什么手动杀掉微信后还可以收到推送消息,那是因为微信与各个厂商合作,会给微信默认开启自启动权限,微信被杀后它的后台Service会立马重启,如果你把微信的自启动权限关了,那么微信也同样收不到推送消息的。
  对于该问题目前的解决办法只能通过引导用户对本应用开启自启动权限,不过大部分用户估计不会这样做。

  2. 应用程序是通过广播的形式互相唤醒的,目前有个问题就是你的进程被杀了怎么接收广播?
  首先,动态注册的广播在应用被杀后是收不到消息的,所以广播需要静态注册
  其次,即使静态注册广播在大部分情况下也收不到消息,这是为什么呢?
  因为在在android3.1以后系统给Intent定义了两个新的Flag,分别为FLAG_INCLUDE_STOPPED_PACKAGES和FLAG_EXCLUDE_STOPPED_PACKAGES,用来控制Intent是否对处于停止状态的App起作用。所以在android3.1之后想通过监听系统广播换起app基本是无效的。
  但是可以通过其他应用发的广播来唤醒app,只不过需要在发送广播时flag设置为FLAG_INCLUDE_STOPPED_PACKAGES并且指定广播接收器的android:exported=“true”。

android收不到消息推送原因分析相关推荐

  1. Android socket 编程 实现消息推送(二)

    上篇文章Android socket 编程 实现消息推送(一)讲到socket编程的消息推送原理,现在我们来看看基于Android客户机socket编程实现消息推送的过程. 根据消息推送的原理图,我们 ...

  2. Android socket 编程 实现消息推送

    最近用socket写了一个消息推送的demo,在这里和大家分享一下. 主要实现了:一台手机向另外一台手机发送消息,这两台手机可以随时自由发送文本消息进行通信,类似我们常用的QQ. 效果图:    原理 ...

  3. Android socket 编程 实现消息推送(一)

    最近用socket写了一个消息推送的demo,在这里和大家分享一下. 主要实现了:一台手机向另外一台手机发送消息,这两台手机可以随时自由发送文本消息进行通信,类似我们常用的QQ. 效果图        ...

  4. 【转】手机锁屏收不到消息推送解决方案

    问题描述 部分 Android 手机系统在黑屏待机后自动清理后台运行的软件,这样影响了应用正常接收新的消息,需要将应用设置为后台运行应用.各类机型的设置说明如下: 华为 Mate9 手机设置说明 华为 ...

  5. Android:Umeng(友盟)消息推送(二)

    在已集成友盟统计的情况下:Android:Umeng(友盟)数据统计(一) 第一步: 个人中心---U-Push(消息推送)---添加新应用---从已有应用中添加  如图: 获得Appkey和secr ...

  6. 【转】android系统的APP消息推送机制

    原文:https://www.jianshu.com/p/f898a2c02b05 参考文章: http://blog.csdn.net/carson_ho/article/details/52862 ...

  7. Android集成阿里云消息推送的方法步骤

    一 创建App应用 1.1 在控制台发(https://mhub.console.aliyun.com)的App列表页,点击页面产品列表中"添加产品"的图标即可创建一个新的产品(产 ...

  8. Android端消息推送总结:实现原理、心跳保活、遇到的问题等

    前言 最近研究Android推送的实现, 研究了两天一夜, 有了一点收获, 写下来既为了分享, 也为了吐槽. 需要说明的是有些东西偏底层硬件和通信行业, 我对这些一窍不通, 只能说说自己的理解. 为什 ...

  9. 浅谈iOS和Android后台实时消息推送的原理和区别

    http://www.52im.net/thread-286-1-1.html 前言 iOS和Android上的实时消息推送差异很大,往小了说是技术实现的差异,往大了说是系统实现理念的不同.实时消息推 ...

  10. iOS和Android即时通讯开发时后台实时消息推送的原理和区别

    iOS和Android上的实时消息推送差异很大,往小了说是技术实现的差异,往大了说是系统实现理念的不同.实时消息推送在移动端互联网时代很平常,也很重要,它的存在让智能终端真正成为全时信息传播的工具.本 ...

最新文章

  1. 用1天快速上手org-mode(windows系统)
  2. DataTable筛选符合条件的DataRow
  3. c++服务器开发学习--02--MySQL,Redis,ASIO,iocp,TrinityCore代码结构,c++对象模型
  4. cat命令的13个用法
  5. windows 8文件操作帮助类FileHelper
  6. Microsoft SQL Server 自定义函数整理大全--转【叶子】的文章
  7. 西北工业大学matlab安装,西北工业大学Matlab实验报告.doc
  8. tcp假连接_总结的23 个 TCP高频面试问题
  9. 老师不能把你怎样,但外面的世界可以!
  10. 用python开启相机_使用“打开”编辑相机设置
  11. cocos2d学习之路四(添加遥控杆)
  12. 微信运营必须收藏的软件工具网站合集
  13. Tableau画图初学者~新手教程~常见类型图
  14. wso2 mysql,WSO2 DAS +具有MySQL的集群APIM
  15. java 火星坐标转换,java实现百度坐标的摩卡托坐标与火星坐标转换的示例
  16. JAVA定义矩形类 方法一
  17. Swift版百思不得姐
  18. 虾皮Shopee上货铺货助理工具
  19. 基础拓扑学笔记(2)——拓扑不变量
  20. 下载图片到指定文件夹

热门文章

  1. perl 报错 Can’t locate JSON.pm in @INC
  2. c# 获取TrueType字体轮廓,单笔画信息(杂)
  3. “联系我们”飘窗实现
  4. 南澳西冲东冲穿越2日游
  5. 戴尔服务器t330系统启动不起来怎么回事,戴尔T330服务器故障
  6. 全自动过滤器处理农村生活污水技术指南
  7. cmd无敌加密安全代码
  8. java实现奇怪的比赛
  9. Nature重要新发现:将运动小鼠的血液输入久坐小鼠中,可以改善大脑功能!
  10. Github Action学习-Django自动化测试