android - 在 Android 应用程序中实现此行为的最佳策略?

标签 android asynchronous timer task alarms

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

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

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

最佳答案

I have some data that needs to be synced daily but also needs to be updated every hour when a user is inside the app.

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

I could use an hourly alarm too and fire the same intent, but since your app can be killed at any time, there would be no way to cancel it

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

Im assuming all Timers get cancelled when an app is killed right?

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

But my app consists of several activities and I want the timer to work across all activities, how do I do that?

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

关于android - 在 Android 应用程序中实现此行为的最佳策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3168232/

相关文章:

android - 在Eclipse中还原Gradle构建:

android - Admob 问题 - 与 Play 商店中的应用程序链接错误

javascript - 登录后 React 重新渲染——以及异步调用后

Angular2 可观察定时器条件

c# - 使用 WPF MVVM 实现和显示 UI 计时器

C++ Ncurses 显示计时器

android - 从 XML 读取维度的奇怪行为

objective-c - Mac OS 命令行工具处理异步导出视频以进行重新编码(已编辑并正在运行)

python - 异步运行 Azure Durable Function

Android Studio无法检测到红米5A