在Android应用中实施此行为的最佳策略?

时间:2010-07-02 18:28:45

标签: android asynchronous timer task alarms

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

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

另一种选择是使用在应用程序内部设置的计时器,并在应用程序内部激活我的意图。我假设当应用程序被杀时,所有计时器都被取消了吗?但我的应用程序包含几个活动,我希望计时器能够在所有活动中运行,我该怎么做?我不想复制代码 - 我们已经在使用Activity和ListActivity的子类。

2 个答案:

答案 0 :(得分:2)

  

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

解决方案似乎很简单:放弃第二个要求。由于人们倾向于将Android手机用于其他东西(例如手机),因此很少有应用程序连续使用数小时,因此您的每小时使用更新代码可能永远不会运行。

  

我也可以使用每小时闹钟   同样的意图,但因为你的   应用程序可以随时被杀死   将无法取消它

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

  

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

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

  

但我的应用程序包含几个   活动,我想要计时器   在所有活动中工作,我该怎么做   那样做?

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

答案 1 :(得分:0)

你可能能够在后台服务中运行一个计时器(死亡次数少于活动),但仍无法保证Android也不会终止你的服务。运行这样的东西背景可能会使用大量的电池。

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