Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在10小时内每1分钟(60*1000毫秒)调用一次api_Android_Multithreading_Timer - Fatal编程技术网

Android 在10小时内每1分钟(60*1000毫秒)调用一次api

Android 在10小时内每1分钟(60*1000毫秒)调用一次api,android,multithreading,timer,Android,Multithreading,Timer,我正在开发一个在后台运行的应用程序,需要每1分钟(60*1000毫秒)调用一次api,并且没有任何波动。我试过调度程序、定时器和其他东西,但都不能正常工作。例如,我的场景是在上午9:11:36(第一次api调用)、上午9:12:36(第二次api调用)等时间调用api,最后的api调用将在晚上11:20:36。我使用了以下代码: Handler minuteHandler = new Handler(); minuteHandler.postDelayed(runnable, 60000); f

我正在开发一个在后台运行的应用程序,需要每1分钟(60*1000毫秒)调用一次api,并且没有任何波动。我试过调度程序、定时器和其他东西,但都不能正常工作。例如,我的场景是在上午9:11:36(第一次api调用)、上午9: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);
 }
};

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

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

请注意,处理程序在活动暂停或停止时停止,在活动恢复时恢复


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

您可以在api级别26之前使用服务,但在api级别27中,服务将被操作系统自动终止

你贴的代码在哪里?活动?服务一些作业调度器?嗨@Pawel,我在活动和服务中都很好地尝试了代码。你为什么需要这样的东西?你可能无法在任何手机上实现这一点,因为电池很快就会耗尽。嗨@egoldx!很抱歉,在这种情况下,这些内容无法公开,电池耗尽问题对我来说不是问题。您需要使用前台服务。谢谢@Jia Li,我会检查。顺便说一句,在API 21之前,请尝试AlarmManager.setExact。它在剂量模式下不工作,但在API 21之前剂量模式不存在。是的,报警管理器在这种情况下不工作,我已经尝试过了。什么不工作?无法使用AlarmManager启动服务?或者,你不能每1分钟做一次?我面临的问题是设备锁定时秒/分钟的波动。谢谢Siddhesh。我已经尝试过使用这个服务,并且在处理这个服务时没有死机。我的问题是,需要每1分钟(60*1000)调用一次api,并且没有任何波动。
new Timer("threadname", true).scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
   // your runnable code              
        }
    }, 0,60*1000);