【问题标题】:Best strategy to implement this behavior in Android app?在 Android 应用中实现此行为的最佳策略?
【发布时间】:2010-07-02 18:28:44
【问题描述】:

在我的 Android 应用中,我有一些数据需要每天同步,但当用户在应用内时,还需要每小时更新一次。

我已经实现了一项服务,该服务可以从警报中调用以进行每日更新。我在制定每小时同步的策略时遇到问题。我也可以使用每小时警报并触发相同的意图,但是由于您的应用程序可以随时被终止,因此无法取消它(并且由于它们使用相同的意图,因此取消将取消所有警报,包括我的每日同步,所以这可能不太好)。

另一个选项是使用在应用程序内部设置的计时器,并在应用程序内部触发我的 Intent。我假设当应用程序被杀死时所有计时器都会被取消,对吗?但是我的应用程序包含几个活动,我希望计时器可以在所有活动中工作,我该怎么做?我不想重复代码 - 我们已经在使用 Activity 和 ListActivity 的子类。

【问题讨论】:

    标签: android asynchronous timer task alarms


    【解决方案1】:

    我有一些数据需要 每天同步,但也需要 当用户每小时更新一次 在应用内。

    解决方案似乎很简单:放弃第二个要求。很少有应用程序会连续使用数小时,因为人们倾向于将他们的 Android 手机用于其他事情(例如手机),因此您的 update-hourly-if-used-all-the-time 代码可能永远不会运行。

    我也可以使用每小时闹钟 发射同样的意图,但因为你的 应用程序可以随时被杀死,那里 没有办法取消它

    FWIW,您的应用在屏幕上时不会被杀死。而且,虽然它不在屏幕上,但您不希望每小时更新一次。

    我假设所有计时器都被取消 当一个应用程序被杀死时对吗?

    应用程序通常不会被“杀死”。我们希望您在使用onDestroy() 调用您的活动时自行清理。如果您使用守护线程设置Timer,则需要终止该线程。

    但我的应用由几个 活动,我希望计时器 在所有活动中工作,我该怎么做 这样做?

    从您的每个活动中绑定到您的服务。如果它是由您的警报Intent 启动的,请让它进行正常的更新处理。如果它是由于绑定请求而启动的,只需确保其每小时的Timer 正在运行。当使用onDestroy() 调用它时(例如,在所有活动都未绑定之后),让它停止Timer

    【讨论】:

    • 实际上,这种人们可能会使用数小时的应用程序(如果不违反保密协议,我无法说出它到底是什么)。但是,我决定放弃每小时更新通过计时器/警报的想法。我决定实施的方案: * 每天通过单个警报更新一次(然后获取新数据并为第二天设置新警报)。 * 如果用户正在使用应用程序并且自上次更新以来已超过 1 小时,请进行后台更新。 * 对于一项特定活动,如果用户更改了某些数据,我会将这些数据推送出去。 * 用户也可以随时强制手动更新。
    • @Eno:听起来不错。
    • 我希望在 Android 中有一个更全面的唤醒锁使用示例。我看过 Busy Coder 的书,但我很难清楚地理解它。
    【解决方案2】:

    您也许可以让 Timer 在后台服务中运行(它被杀死的次数少于活动),但仍然不能保证 Android 也不会杀死您的服务。在后台运行这样的东西可能会消耗大量电池。

    如何在 onResume 中创建的后台线程中进行每小时同步?并且只需保存用户上次进行同步的时间,如果已经超过一个小时,请进行同步。因为我认为没有任何理由急切地同步用户永远不会看到的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      相关资源
      最近更新 更多