【发布时间】:2013-07-30 19:30:26
【问题描述】:
哪一个最适合持续/按时间进行服务器更新。
有些开发者使用 AlarmManager 后跟 PendingIntent,有些还使用 Looper 和 Handler。
那么任何人都可以解释一下哪种方法最适合持续网络更新以及原因。
【问题讨论】:
标签: android alarmmanager looper
哪一个最适合持续/按时间进行服务器更新。
有些开发者使用 AlarmManager 后跟 PendingIntent,有些还使用 Looper 和 Handler。
那么任何人都可以解释一下哪种方法最适合持续网络更新以及原因。
【问题讨论】:
标签: android alarmmanager looper
哪一个最适合持续/按时间进行服务器更新?
取决于您的应用当时是否应该在后台/前台运行:
假设您通过处理程序将Runnable 安排到从现在开始的 15 分钟。
如果用户将“关闭”所有正在运行的活动,那么如果一段时间后它没有运行任何前台服务/活动以回收内存,系统可能会终止您的进程。
在这种情况下 - 你的 Runnable 将永远不会被执行。
如果您想在用户离开您的应用程序时持续轮询服务器更新 - 此选项显然不适合您。
如果您选择像这样更新服务器 - 至少从启动的 Service 上下文中进行 - 这样即使用户从一个屏幕导航到另一个屏幕,您的 Handler 引用也将保持分配状态......
另一方面 - 向 AlarmManager 提供待处理的意图可确保无论您的进程是否处于活动状态 - 提供给 AlarmManager 的意图都会唤醒您的应用(以及服务/活动/广播)您提供未决意图。
关于您的问题 - 我认为 两者都不是 是获取服务器更新的好方法:
用户可能在他的设备上安装了 10-20 个从服务器获取更新的应用程序(例如 Facebook/Twitter/Whattsap/Viber/Google+...)。 想象一下,他们每个人都在不同的时间间隔醒来,打开互联网连接,消耗大量宝贵的电池寿命和带宽。 太疯狂了!您的设备永远不会“休眠”,所有进程都会一直打开,互联网蜂窝无线电传输也会。电池会很快富到 0%!
正确的做法是使用 GCM API。它还需要服务器端实现,但一般的想法是,当有新数据传递到服务器端时唤醒您的应用程序的责任,因此 - android 应用程序不需要轮询更新。当服务器通知您时,它只会收到通知(如果进程不活跃,则唤醒)。 如果你想知道 - 这就是它的工作原理 - How does push notification technology work on Android?
我建议你阅读一下 - http://developer.android.com/google/gcm/index.html
【讨论】: