2010-07-02 29 views
1

在我的Android应用程序中,我有一些需要每天同步的数据,但是当用户在应用程序内时,还需要每小时更新一次。在Android应用中实现此行为的最佳策略?

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

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

回答

2

我有一些数据,需要进行 每天同步,但也需要 每小时更新一次当用户 里面的应用程序。

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

我可以用一个小时报警也和 火的目的相同,但因为你的 的应用程序可以在任何时候被杀死,有 就没有办法将其取消

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

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

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

但我的应用程序由几个 活动,我想在所有的活动定时器 工作,我怎么 做到这一点?

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

+0

其实这*是人们可能会使用数小时的应用程序类型(我不能说它完全没有违反NDA)。 但是,我决定取消通过定时器/闹钟的小时更新的想法。 我决定实施的方案: *每天更新一次,通过一次警报(然后获取新的数据并为第二天设置新的警报)。 *如果用户使用的应用程序,并自上次更新1小时以来,做后台更新。 *对于一项特定活动,如果用户更改了某些数据,我会将这些数据推出。 *用户还可以随时强制手动更新。 – Eno 2010-07-07 04:58:39

+0

@Eno:听起来像一个伟大的计划。 – CommonsWare 2010-07-07 11:57:14

+0

我希望在Android中有更完整的wakelock使用示例。我看了繁忙的编码器的书,但林很难明白它的理解。 – Eno 2010-07-08 03:17:13

0

您可能可以在后台服务中运行一个Timer(它比杀死活动少),但仍不能保证Android不会终止您的服务。而像这样运行的背景可能会使用大量的电池。

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