通知推送在Android上的必要性与可行性

移动开发
“iOS通知?哼哼,我们有后台任务”很多Android用户对iOS的通知推送不屑一顾。Android允许应用程序在后台执行任务,诸如QQ等应用程序可以与服务器实时通讯,iOS版QQ的推送延迟也不会在Android上出现。

Android应用甚至拥有iOS无法想象的能力,名为Tasker的应用允许用户创建自动化脚本,比如到地铁入口处自动关闭3G网络,出了地铁再开启之类。那是否Android就不需要通知推送了呢?答案是需要。

原因如下:

1.通知推送可以以三种方式提醒用户(铃声、应用图标上的数字或一条文本信息),这涵盖了大部分后台程序的功能

据我观察,在Android系统上运行服务的软件主要有三种目的:

1)对用户毫无好处的流氓软件,代表软件CutTheRope,该游戏在后台运行服务,但是其任何功能都不需要后台服务的支持。唯一解释是该应用正在收集并上传用户数据。

2)通讯软件,以QQ和微博为代表。Android上的QQ收到信息后会发出铃声并显示一个通知图标。iOS的通知推送完全可以实现,只是有时会有延迟。

3)自动化软件。这些软件在后台执行任务,不与用户交互。代表为短信防火墙和Tasker。不考虑越狱的话,iOS软件无法实现这种功能。这种软件数量较少,使用起来也较复杂,多为高端用户(顺便说下短信防火墙曾经挡了支付宝的验证码短信)

可见,通知推送可以做到大部分“接收服务器通知并呈现给用户”软件要利用后台服务才能搞定的功能。

2.通知推送利用单一的通讯连接与服务器通信,省电省流量

如果你的Android手机同时挂着QQ、微博、微信,用电那是嗖嗖的快呀,而iPhone没有这个问题,挂的多顶多是通知多点惹人烦。运行后台服务连接 服务器,不仅要占用CPU,并且维持3G网络也是很费电的。通知推送在3G连接持续可用时(比如正在用浏览器上网)保持与推送服务器的通信,在手机闲置时 过一段时间才连接一次服务器(这就是QQ推送会延迟的原因),省电。推送服务器把多个消息打包,一起发送给手机,省流量。(如果经过优化,甚至可以仅启用 2G连接接受推送消息。Android后台服务不可能进行这样的优化)

3.软件提供商压力较小

假设我是一个软件提供商,有十万活跃用户,每天给每个用户发送10条消息。如果利用通知机制,我只需要发一百万条消息而已,甚至可以只用一个VPS就完成这点工作。而用Android的后台服务,需要接受10万用户的连接,压力与前者不在一个数量级。

4.编程简单,可以日后升级,尤其适合消息频率低的软件

又要引用那条微博:

@williamlong: 不知道是不是我的错觉还是其他什么原因,刚才我的iphone上忽然弹出一个窗口,说我已经很久没玩捕鱼达人了,然后系统就自动运行我手机上的捕鱼达人应用了。

先不说这种方法是否骚扰用户,他的确是拉来用户的有效方法。在iOS上这太容易实现了,只要在发布软件时请求推送权限就行了。我们看看如果在Android上实现这功能需要怎么做:

1)为软件编写系统服务或开机启动功能。一个高级用户很容易发现你在这么做,并把这功能屏蔽或直接卸载。另外,如果只是为了在半个月后弹出一条通知,这么大动干戈也太“重”了吧?

2)如果没有前瞻性,就需要靠软件升级。开发软件的时候如果没把前一条的功能写好,你准备发布一个增加了系统服务的版本并在更新说明中写上“增加了系统服务,以便弹出通知拉回那些很久不使用的用户”么?

3)安卓软件如果优化的不好,容易死机或者占用过多内存。后台服务也很难优化对网络的访问:使用长连接需要保持网络在线, 如果是过一段时间连接一次服务器,在后台应用较多时也难以省电,不同的应用对网络的访问此起彼伏,网络难以闲置。

以上的分析足以说明Android系统使用推送机制可以带来足够的好处。那么,是否我们很快就可以在下个版本的Android系统中见到推送机制呢?毕竟Google的技术如此强大,Android又是如此需要推送。

如果不考虑专利问题的话,Android和推送之间的***隔阂其实是策略,或者说系统定位。

iOS严重依赖网络服务,一个不越狱,不绑定AppleID的iPhone几乎什么都做不了。推送机制应用于这样的系统顺理成章。原生的Android 系统是个完全自治的环境。他不需要任何辅助就可以自主运行。以CM为例,它里面没有Google账户,没有电子市场。用户需要单独刷入Google服务包 才能使用Google服务。(相比之下,Nexus系列的固件其实是Google定制版的Android)通知推送这种依赖服务器的软件如何在这种系统下 运行?

如果加上通知机制,如果默认为所有Android都使用Google的服务器,则Android本身变为一个依赖Google才能运 行的系统,这显然违背 了Android一向“干净”的风格。如果仅在Google服务包中提供通知服务,无疑等于半抛弃了那些没有服务包的设备们,这也让Android设备的 分化更为严重。

如果Android上有了推送功能,更可能的是系统自带了推送功能代码,而服务器则需要手机厂商(或者用户)自定义。大多数厂商可以直接使用Google的推送服务,亚马逊肯定要用自己的推送服务器,大陆行货就请自求多福把。

软件提供商也面临着难题:他们要连接多个服务器(Google的和Amazon的,没准还有QQ的和阿里云的)以便为不同的用户群提供推送;还必须为那些手 机不支持推送服务的用户做出兼容(捕鱼达人有没有广告推送问题不大,QQ这种实时性高的用后台服务更好些,微博从各个方面看利用推送都正合适,但难道要为 没有推送的用户单独做一个版本?)。好消息是大部分的用户都会在软件提供商那里注册(这样提供商才知道用哪个服务器发起推送),便于追踪用户使用情况。

作为Android用户,真心希望这个优秀的功能可以应用于Android。另外,也真心希望Android有更多可以被其他系统借鉴的优秀设计。

【编辑推荐】

  1. 微软:Android恶意软件受害者可获免费WP手机
  2. 10种技巧可提升Android应用运行效果
  3. 研究称Android是最不开放的开源移动平台
责任编辑:冰凝儿 来源: 浅尝辄止
相关推荐

2012-10-26 13:48:54

云计算运维云安全

2023-05-31 10:02:29

人工智能

2012-04-12 17:41:02

2009-09-21 16:40:42

Hibernate可行

2011-04-28 11:04:22

DataReader分页

2014-02-17 09:37:31

亚马逊WorkSpacesVDI

2009-02-17 15:59:55

2012-06-15 09:37:40

Linuxmark

2009-06-15 09:57:46

HibernateIBatis

2011-06-24 11:35:01

内链

2020-05-20 07:00:00

DevOps端点检测网络攻击

2015-04-16 14:00:55

新浪云SAE序列化

2018-10-17 10:46:54

区块链互操作性比特币

2009-12-11 09:36:02

PHP数据缓存类

2011-11-08 21:19:25

2023-03-07 13:28:17

2009-12-25 14:26:40

无线接入技术集成

2023-08-20 12:34:53

2011-06-14 10:20:20

URL标准化

2023-09-14 15:58:34

C++表达式
点赞
收藏

51CTO技术栈公众号