为啥我应该将城市飞艇服务作为一个单独的流程启动?

Posted

技术标签:

【中文标题】为啥我应该将城市飞艇服务作为一个单独的流程启动?【英文标题】:Why should I start urbanairship service as a separate process?为什么我应该将城市飞艇服务作为一个单独的流程启动? 【发布时间】:2012-01-11 11:08:45 【问题描述】:

我使用 UrbanAirship (UA) 进行推送通知。

UA推送服务在Manifest文件中配置如下:

    <service android:name="com.urbanairship.push.PushService"
     android:process=":com.urbanairship.push.process" /> 

其中 android:process 是可选的,但 recommended in their documentation。

当我使用单个进程并关闭所有活动时,我可以看到我的单个进程消耗了大约 3mb 的内存

当我使用两个进程(一个用于应用程序,一个用于服务)并关闭我的所有活动时,我可以看到两个进程都处于活动状态,每个进程消耗约 3mb 的内存。

所以我的问题是:重点是什么?

【问题讨论】:

我也想知道。看起来 Push 模型与 ios 中使用的模型不同,后者接收通知是在操作系统级别处理然后移交给应用程序的。 对问题进行排名会有所帮助... 【参考方案1】:

我的猜测是 UA 建议这样做是为了让他们自己的代码面临更少的争用/中断。例如,如果您的应用程序崩溃但 UA 代码在单独的进程中运行,那么它们可能会继续运行而不会中断(并避免托管它们的进程突然终止时可能发生的数据损坏)。

有关另一个线索,请参阅这个 SO 问题:Starting an Android notification at startup。如您所见,一些开发人员报告说,一般的 Android 通知有时无法显示,具体取决于他们应用程序组件的生命周期。通过将 UA PushService 放到一个单独的进程中,这可能会缓解这个问题。我将对此进行测试,因为我的 UA 通知有时在重启后不会持续存在。

顺便说一句,最新的 UA 文档似乎不再建议使用自己的单独流程声明服务。

【讨论】:

以上是关于为啥我应该将城市飞艇服务作为一个单独的流程启动?的主要内容,如果未能解决你的问题,请参考以下文章

城市飞艇推送:响应:从服务器获得否定响应:0

城市飞艇证书

从城市飞艇用户信息中提取警报

旅行推销员将贬值物品运送到不同的市场

为啥 Azure 流分析将数据输出到单独的文件?

K8S系列---jenkins主从构建发布流程