2

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

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

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

4

2 回答 2

2

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

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

我也可以使用每小时警报并触发相同的意图,但是由于您的应用程序可以随时终止,因此无法取消它

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

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

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

但是我的应用程序包含几个活动,我希望计时器可以在所有活动中工作,我该怎么做?

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

于 2010-07-02T19:46:34.770 回答
0

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

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

于 2010-07-02T19:46:58.530 回答