安卓如何做到离线推送

2016-04-19  本文已影响4540人  sufferable

       今天公司提了新需求,要求用户设置时间和提示内容后,可以到时间后给用户推送他设置的内容,我说这个直接交给服务器来做呀,但是业务要求是当进程被杀死的时候也能让用户收到推送,手机离线的情况下也能收到.简单的说就是离线定时推送.IOS可以做到,我跟产品说这个安卓很难做到,让我尝试下,因为我作为一个安卓软件工程师知道要做到这点必须要求是进程不被杀死,但是现在安卓用户各种清理管家,android手机也自带杀进程功能,一旦进程杀死,就无法接收到离线推送.

      在android2.3的时代,这个需求真的很简单,最直接的方法就是开一个守护线程,当主线程被杀死的时候重启应用,这也是当时大多数应用为了保证应用不退出的做法,这也直接导致android手机越用越慢的原因,但是在API18以后,google公司对于android系统的不断优化,很多权限被禁止开发人员拿到,这用做法也已经无法做到了,前段时间,Github还出现了一个很火的“黑科技”进程保活库,声称可以做到进程永生不死,我怀着膜拜和学习的心理去看了下,结果发现很多人提了 Issue 说各种各样的机子无法成功保活。

      看到这里,我瞬间就放心了。坦白的讲,我是真心不希望有这种黑科技存在的,它只会滋生更多的流氓应用,拖垮我大 Android 平台的流畅性。

扯了这么多,接下来就直接进入本文的正题,谈谈关于进程保活的知识。

Android进程保活手段主要分3种:

      1:利用不同的app进程使用广播来进行相互唤醒

      2:它是利用系统的漏洞来启动一个前台的Service进程,与普通的启动方式区别在于,它不会在系统通知栏处出现一个Notification,看起来就如同运行着一个后台Service进程一样。

      3:调用系统api启动一个前台的Service进程,这样会在系统的通知栏生成一个Notification,用来让用户知道有这样一个app在运行着,哪怕当前的app退到了后台.比如网易云音乐.

居然如何实现我发现简书上有大神讲的很详细,就直接把他文章的链接丢过来吧:

http://www.jianshu.com/p/63aafe3c12af#

哎,还要向产品详细说明为啥做不到的原因,好烦.

上一篇 下一篇

猜你喜欢

热点阅读