警报管理器或处理程序
AlarmManager or Handler
我有特定情况要每隔 10-60 分钟 ping 我的服务器 (这仍然取决于),但仅当应用程序打开时。
创建此功能是为了通知会话仍处于打开状态,其中会话定义为从应用程序打开到应用程序关闭的时间段。我不必担心进程终止。
什么更好用? AlarmManager 或 Handler.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
。我马上能想到几个原因:
- 如果你使用
Handler
并想 post 一个 "cancellable" Runnable
到它,那么你必须存储对 Handler
和 Runnable
以便能够取消执行(例如,如果用户离开您的应用程序)。这意味着您必须将它们存储在 Application
上下文中,或者为此功能创建一个 Service
。通常不鼓励对这种东西使用 Application
,Service
有点矫枉过正。
AlarmManager
是这种东西的标准 API。阅读您的源代码的任何其他开发人员(或几个月后的您自己)将更容易理解该功能。
- 我不明白如何使用
Handler
方法减少代码 - 要使用 AlarmManager
,您只需要一个创建 PendingIntent
的方法,即在 AlarmManager
... 中传递给 set
和 cancel
方法
- 至于CPU用法,我敢肯定规模不大,所以无所谓。
一般来说,我认为 Handler#postDelayed
不应该用于控制涉及用户交互的流程。就是感觉不对,笨拙。
我有特定情况要每隔 10-60 分钟 ping 我的服务器 (这仍然取决于),但仅当应用程序打开时。 创建此功能是为了通知会话仍处于打开状态,其中会话定义为从应用程序打开到应用程序关闭的时间段。我不必担心进程终止。
什么更好用? AlarmManager 或 Handler.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
。我马上能想到几个原因:
- 如果你使用
Handler
并想 post 一个 "cancellable"Runnable
到它,那么你必须存储对Handler
和Runnable
以便能够取消执行(例如,如果用户离开您的应用程序)。这意味着您必须将它们存储在Application
上下文中,或者为此功能创建一个Service
。通常不鼓励对这种东西使用Application
,Service
有点矫枉过正。 AlarmManager
是这种东西的标准 API。阅读您的源代码的任何其他开发人员(或几个月后的您自己)将更容易理解该功能。- 我不明白如何使用
Handler
方法减少代码 - 要使用AlarmManager
,您只需要一个创建PendingIntent
的方法,即在AlarmManager
... 中传递给 - 至于CPU用法,我敢肯定规模不大,所以无所谓。
set
和 cancel
方法
一般来说,我认为 Handler#postDelayed
不应该用于控制涉及用户交互的流程。就是感觉不对,笨拙。