2

哪一个最适合连续/按时间进行服务器更新。

一些开发人员使用 AlarmManager,然后使用 PendingIntent,一些开发人员还使用 Looper 和 Handler。

所以任何人都可以向我解释什么最适合持续网络更新以及为什么。

4

1 回答 1

1

哪一个最适合持续/按时间进行服务器更新?

取决于您的应用程序是否假设当时在后台/前台运行:

假设您Runnable通过处理程序安排从现在开始的 15 分钟。
如果用户将“关闭”所有正在运行的活动,那么如果一段时间后它没有运行任何前台服务/活动以回收内存,系统可能会终止您的进程。在这种情况下 - 你Runnable将永远不会被执行。
如果您想在用户离开您的应用程序时持续轮询服务器更新 - 此选项显然不适合您。如果您选择像这样更新服务器 - 至少从启动的Service上下文中进行 - 这样即使用户从一个屏幕导航到另一个屏幕,您的 Handler 引用也将保持分配状态......

另一方面 - 提供未决意图以AlarmManager确保无论您的进程是否处于活动状态 - 提供给 的意图AlarmManager将唤醒您提供的具有未决意图的应用程序(以及服务/活动/广播)。

关于您的问题-我认为这两者都不是获取服务器更新的好方法:

用户可能在他的设备上安装了 10-20 个从服务器获取更新的应用程序(例如 Facebook/Twitter/Whattsap/Viber/Google+...)。想象一下,他们每个人都在不同的时间间隔醒来,打开互联网连接,消耗大量宝贵的电池寿命和带宽。 太疯狂了!您的设备将永远不会“休眠”,所有进程都将一直打开,互联网蜂窝无线电传输也会。电池会很快富到 0%!

正确的做法是使用 GCM API。它还需要服务器端实现,但一般的想法是,当有新数据传递到服务器端时唤醒您的应用程序的责任,因此 - android 应用程序不需要轮询更新。当服务器通知您时,它只会收到通知(如果进程不活跃,则唤醒)。如果您想知道 - 这就是它的工作原理 -推送通知技术如何在 Android 上工作?

我建议你阅读它 - http://developer.android.com/google/gcm/index.html

于 2013-07-30T15:44:48.960 回答