在我的Android应用中,我有一些需要每天同步的数据,但是当用户进入应用程序时,还需要每小时更新一次。
我已经实现了一项服务,可以从警报中调用每日更新。我在开发每小时同步策略时遇到问题。我也可以使用每小时警报并激发相同的意图,但由于您的应用程序可以随时被杀死,因此无法取消它(因为它们使用相同的Intent,取消将取消所有警报,包括我的每日同步,这可能不太好。)
另一种选择是使用在应用程序内部设置的计时器,并在应用程序内部激活我的意图。我假设当应用程序被杀时,所有计时器都被取消了吗?但我的应用程序包含几个活动,我希望计时器能够在所有活动中运行,我该怎么做?我不想复制代码 - 我们已经在使用Activity和ListActivity的子类。
答案 0 :(得分:2)
我有一些需要的数据 每天同步但也需要 用户每小时更新一次 在应用程序内部。
解决方案似乎很简单:放弃第二个要求。由于人们倾向于将Android手机用于其他东西(例如手机),因此很少有应用程序连续使用数小时,因此您的每小时使用更新代码可能永远不会运行。
我也可以使用每小时闹钟 同样的意图,但因为你的 应用程序可以随时被杀死 将无法取消它
FWIW,你的应用程序在屏幕上不会被杀死。并且,虽然它不在屏幕上,但您不希望每小时更新一次。
我假设所有计时器都被取消了 当一个应用程序被杀死了吗?
应用程序通常不会被“杀死”。我们希望您在使用onDestroy()
调用活动时自行清理。如果使用守护程序线程设置Timer
,则需要终止该线程。
但我的应用程序包含几个 活动,我想要计时器 在所有活动中工作,我该怎么做 那样做?
从您的每项活动中绑定您的服务。如果它是由您的警报Intent
启动的,请让它进行正常的更新处理。如果由于绑定请求而启动,请确保其每小时Timer
正在运行。当使用onDestroy()
调用它时(例如,在所有活动都未绑定之后),让它停止Timer
。
答案 1 :(得分:0)
你可能能够在后台服务中运行一个计时器(死亡次数少于活动),但仍无法保证Android也不会终止你的服务。运行这样的东西背景可能会使用大量的电池。
如何在onResume中创建的后台线程中进行每小时同步?并且只保存用户上次执行同步的时间,如果已经>一小时就可以进行同步。因为我认为没有任何理由急切地同步用户永远不会看到的数据。