【问题标题】:Android: Looper vs AlarmManagerAndroid:Looper 与 AlarmManager
【发布时间】:2013-07-30 19:30:26
【问题描述】:

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

有些开发者使用 AlarmManager 后跟 PendingIntent,有些还使用 Looper 和 Handler。

那么任何人都可以解释一下哪种方法最适合持续网络更新以及原因。

【问题讨论】:

    标签: android alarmmanager looper


    【解决方案1】:

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

    取决于您的应用当时是否应该在后台/前台运行:

    假设您通过处理程序将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

    【讨论】:

    • +1 以获得好的建议。很好的解释,对我和许多开发人员也非常有用。但是你能帮我理解为什么你总是喜欢 GCM(谷歌云消息)。以及这如何有助于按时间向服务器发送/接收数据(例如:gps 跟踪应用程序总是必须做这样的事情)。这是为这项工作使用艰难和新事物的完美决定吗?或者我们将继续之前的(AlalamManager/Looper)。
    • 好的..当我们需要更新的服务器数据时它很好。即当服务器发现一些新数据时,它会立即将其推送到客户端。美好的。但是客户呢(反之亦然)?它将如何将持续更新的数据(例如:纬度、经度)发送到服务器..
    • 我向您解释了为什么它要好得多。您在问题中没有提到任何有关相反方向的内容(将您当前的位置发送到服务器)。无论如何-如果您想在位置更改时发送服务器信息-您必须小心谨慎,因为我已经提到了原因。并且您的问题“使用 Handlers vs AlarmManager”不相关-因为如果您使用的是谷歌最佳实践-您必须明确设置位置侦听器回调或提供待处理的意图。这里与处理程序无关
    • 我知道所有这些事情以及我的问题。但是非常感谢你用一个很好的建议消除了我的疑虑。我将必须在我的后续应用程序中使用 GCM。谢谢
    猜你喜欢
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 2011-06-01
    相关资源
    最近更新 更多