java - 如何实现更新服务在后台运行?

标签 java android service cron daemon

我目前正在为 Android 操作系统开发一个显示一些数据的应用程序。为确保此数据是最新的,应用程序需要不时从远程服务器获取更新。 由于数据不会经常更改,因此应每周更新一次。我想让用户能够选择更新的工作日和白天(并可选择完全禁用此功能)。

问题是:即使用户此时没有使用手机,即使手机当前处于 hibernate 状态,即使手机最近重新启动且应用程序尚未启动,也应该执行此更新还没有。

我首先想到的是在系统启动时启动的远程服务,确定运行更新的时间,设置计时器,然后等待/hibernate 以等待计时器触发。

现在,我被告知我应该使用警报计时器或某种处理程序......我对这个主题的了解越多,似乎存在越多的方法来做到这一点。

现在,我有点迷茫哪种方法最适合我...所以这是我需要的:

  • 我想在指定的时间执行一些代码。
  • 这个定时器用于触发7天后代码的执行。 (即每周在给定的工作日和时间)
  • 如果手机处于“ sleep ”状态(屏幕变暗),代码应该在不唤醒手机的情况下运行。
  • 运行代码时,不应启动任何 Activity 。即屏幕上不会弹出任何应用程序。
  • 执行的代码应该从互联网上获取一些数据。如果此时没有互联网连接可用,定时器应设置为 hibernate 30 分钟,然后重试。
  • 代码执行完成后,定时器将设置为下一个间隔时间,即7天后。
  • 计时器应该在系统启动时启动,例如,如果我重新启动手机,计时器应该确定下一个执行代码的日期并安排计时器。这必须在没有任何用户交互的情况下工作! (即没有应用程序本身启动)
  • 当“hibernate ”时,线程/服务/定时器/任何东西都应该尽可能不消耗任何系统资源......
  • 我需要的几乎是一个简单的 unix cronjob。

    我想这里有人知道 android 的“newsrob”吗?我想要实现的与 newsrob-updateservice 几乎相同。

  • 最佳答案

    Android Service + Broadcast Receiver + Alarm Service 将解决你的目的-

    您的服务将从 BroadCast Receiver 调用,在 Broadcast Receiver 中您应该注册各种事件 - BOOT_RECEIVER 、 ACTION_USER_PRESENT ,这将负责您的 ALARM 重置和更新任务。

    谢谢。

    关于java - 如何实现更新服务在后台运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3889014/

    相关文章:

    Android - API 级别 21 中的日期

    java - Sharepoint Web 服务 Java - 无数据

    java - Jetty:将静态内容的 HTTP 重定向到 HTTPS

    java - 将 2 个模式集成在一起

    java - FragmentManager 回收

    java - 使 editText 提示斜体?

    java - 使用 Boolean AND 时显式评估两个条件

    java - 用户刷新时如何处理Spring Boot Controller 中的非jsp方法

    tomcat - 为什么我们在应用程序/服务中需要关闭端口和启动端口?

    android - 启动后调试服务