【问题标题】:Android periodic task every 5 minutesAndroid 周期任务每 5 分钟
【发布时间】:2021-08-09 13:07:13
【问题描述】:

我需要每 5 分钟从我的网络服务下载一些数据(用户可以更改此间隔时间,但最小值是每 5 分钟一次),并且因为 Android 的 WorkManager 旨在处理大于 15 分钟的间隔,我想用RxJava Observable.interval 甚至Handler 和它的postDelayed 方法。

该工作应该在应用程序处于前台或后台时完成,但我希望它在应用程序关闭时停止。

我的方法是正确的还是建议我使用任何其他库?谢谢。

【问题讨论】:

  • 如果你想从后台下载它(当应用程序关闭时)那么没有解决方案。您需要 root 访问权限才能运行时间段
  • 抱歉,我希望它在第二个线程(不是 ui 主线程)中运行,但不是在应用关闭时运行。

标签: android rx-java rx-android android-workmanager android-handler


【解决方案1】:

您可以使用 Timer 和 TimerTask(您的代码将在其中下载数据)由 Timer 每 5 分钟运行一次。

Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
    @Override
    public void run(){
        //download data
    }
}
timer.scheduleAtFixedRate(timerTask, 0, 300 * 1000);

【讨论】:

  • 我看过 TimerTask 不可靠,不应该使用。
  • 抱歉,我更正了代码。我经常使用它,效果很好
  • 如果你的应用进入后台并且没有前台服务在运行,则不保证Timer被执行。
  • @MartinMarconcini 抱歉,我的意思是第二个线程(不是主线程),但我希望它在应用程序处于前台或后台时运行,但我希望它在应用程序运行时停止关闭。
  • 是的,如果没有前台服务则不能保证任务会被执行。
【解决方案2】:

不要使用会耗尽用户电池的轮询网络服务,而是使用 Firebase 云消息传递:

  1. 安卓应用启动,可以获取firebase令牌
  2. android 应用将此令牌发送到 web 服务
  3. 当某些事件触发的 web 服务使用令牌向 google firebase 发送推送通知时
  4. google play 服务使用数据唤醒您的应用程序。

如果您不能使用 firebase - 唯一的方法是在状态栏中使用带有粘性通知的前台服务,这对用户来说非常烦人。无论如何,即使使用前台服务,如果设备屏幕在如此短的超时时间内关闭,您也将无法工作。

【讨论】:

    猜你喜欢
    • 2014-12-29
    • 1970-01-01
    • 2020-09-08
    • 2015-04-30
    • 2014-01-15
    • 2021-04-05
    • 2020-06-30
    • 1970-01-01
    • 2016-02-15
    相关资源
    最近更新 更多