首页 > 解决方案 > 每 60*1000 毫秒调用一次 API

问题描述

我正在编写代码,我需要在前台和后台每 60*1000 毫秒调用一些 api,而与活动/片段无关。

我曾尝试使用处理程序和其他各种解决方案,如作业调度程序等。当设备连接到电源或设备屏幕唤醒时,我的解决方案工作正常,但当设备被锁定时,它不能正常工作。目前我在应用程序类中使用下面提到的逻辑

Handler minuteHandler = new Handler();
minuteHandler.postDelayed(runnable, 60*1000);
final Runnable runnable = new Runnable() {
    @Override
    public void run() {
        // method to call api
        minuteHandler.removeCallbacks(runnable);
        minuteHandler.postDelayed(runnable, 60*1000);
    }
};

解决方案很简单,因为我需要每 60 * 1000 毫秒调用一次 api,而不会以毫秒为单位持续延迟长达 8 到 10 个小时,直到应用程序被破坏。

标签: androidtimeralarmmanagerscheduler

解决方案


一种选择是使用唤醒锁。这是文档中的一个示例:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();

// screen and CPU will stay awake during this section
wl.release();

这可以防止屏幕锁定

或者您可以使用android:keepScreenOnActivityAndroidManifest
来源:https ://stackoverflow.com/a/372​​3649/9819031


推荐阅读