警报管理器或处理程序

AlarmManager or Handler

我有特定情况要每隔 10-60 分钟 ping 我的服务器 (这仍然取决于),但仅当应用程序打开时。 创建此功能是为了通知会话仍处于打开状态,其中会话定义为从应用程序打开到应用程序关闭的时间段。我不必担心进程终止。

什么更好用AlarmManagerHandler.postDelayed() ?

目标平台是 android 电视,因此想象一下在我的应用程序上下文中观看电影时的情况。

就个人而言,我首先想到使用 AlarmManager,但我意识到与环境相比,它需要生成更多的代码。 处理程序是否导致更多CPU使用增加

AlarmManager 将来在您的应用未 运行 时启动您的应用。所以我认为 Handler.postDelayed() 是一个更有效的选择,如果你只在应用程序打开时 ping 服务器。

Note: The Alarm Manager is intended for cases where you want to have your application code run at a specific time, even if your application is not currently running. For normal timing operations (ticks, timeouts, etc) it is easier and much more efficient to use Handler.

参见AlarmManager

对于此用例,您绝对应该使用 AlarmManager。我马上能想到几个原因:

  1. 如果你使用 Handler 并想 post 一个 "cancellable" Runnable 到它,那么你必须存储对 HandlerRunnable 以便能够取消执行(例如,如果用户离开您的应用程序)。这意味着您必须将它们存储在 Application 上下文中,或者为此功能创建一个 Service。通常不鼓励对这种东西使用 ApplicationService 有点矫枉过正。
  2. AlarmManager 是这种东西的标准 API。阅读您的源代码的任何其他开发人员(或几个月后的您自己)将更容易理解该功能。
  3. 我不明白如何使用 Handler 方法减少代码 - 要使用 AlarmManager,您只需要一个创建 PendingIntent 的方法,即在 AlarmManager...
  4. 中传递给 setcancel 方法
  5. 至于CPU用法,我敢肯定规模不大,所以无所谓。

一般来说,我认为 Handler#postDelayed 不应该用于控制涉及用户交互的流程。就是感觉不对,笨拙。