【问题标题】:Call api for every 1 minute(60*1000 milliseconds) upto 10 hours每 1 分钟(60*1000 毫秒)调用一次 api,最长 10 小时
【发布时间】:2018-07-27 13:24:52
【问题描述】:

我正在开发在后台运行的应用程序,并且需要每 1 分钟(60*1000 毫秒)调用一次 api 而没有任何波动。我已经尝试过调度程序、计时器和其他东西,但它不能正常工作。例如,我的场景是在上午 09:11:36(第一次 api 调用)、09:12:36(第二次 api 调用)等时间调用 api,最后最后的 api 调用将在 11 点:晚上 20 点 36 分。我使用了以下代码:

Handler minuteHandler = new Handler();
minuteHandler.postDelayed(runnable, 60000);
final Runnable runnable = new Runnable() {
@Override
public void run() {
 // your runnable code
 minuteHandler.removeCallbacks(runnable);
 minuteHandler.postDelayed(runnable, 60000);
 }
};

new Timer("threadname", true).scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
   // your runnable code              
        }
    }, 0,60*1000);

等等, 我的问题是可以在android(所有操作系统版本)中实现。

【问题讨论】:

  • 您发布的代码在哪里?活动?服务?一些 JobScheduler?
  • 嗨@Pawel,我已经在活动和服务中尝试过代码。
  • 你为什么需要这样的东西?您可能无法在任何手机上实现这一点,因为电池很快就会没电。
  • 嗨@egoldx!抱歉,在这种情况下,事情不能暴露,电池耗尽问题对我来说不是问题。
  • 你需要使用前台服务比。

标签: android multithreading timer


【解决方案1】:

使用前台服务尝试 AlarmManager.setAlarmClock (API 21) 或 setExactAndAllowWhileIdle (API 23)。这是我发现的唯一在 Android 的 Dose 模式下在后台工作的东西。

请注意,处理程序会在您的活动暂停或停止时停止,并在活动恢复时恢复。

不确定计时器。但是,我确信当设备处于睡眠状态时它不会在后台工作。

【讨论】:

  • 谢谢@Jia Li,我会查的。
  • 顺便说一句,在 API 21 之前,请尝试使用 AlarmManager.setExact。它在 Dose 模式下不起作用,但在 API 21 之前不存在 Dose 模式。
  • 是的,警报管理器在这种情况下不起作用,我已经尝试过了。
  • 什么不起作用?您无法使用 AlarmManager 启动服务?或者,你不能每 1 分钟做一次?
  • 我面临的问题是设备锁定时的秒/分钟波动。
【解决方案2】:

您可以在 api 级别 26 之前使用服务来实现这一点,但在 api 级别 27 中,服务将自动被操作系统杀死。

【讨论】:

  • 感谢 Siddhesh。我尝试过使用服务并处理服务而不杀死。我的问题是需要每1分钟(60 * 1000)调用一次api,没有任何波动。
猜你喜欢
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
  • 2023-02-13
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多