Java 哪个类用于执行常规任务?服务与意向服务与工作经理

Java 哪个类用于执行常规任务?服务与意向服务与工作经理,java,android,Java,Android,我想定期执行一项任务,目前执行为runnable。下一次执行时间是在代码本身中设置的,它的延迟从8分钟变为90分钟。此时准确执行并不重要,延迟几分钟是没有问题的。该任务包括一个网站(HTML)的下载和一个字符串的提取。此时不需要UI,但如果应用程序也未运行,则应执行任务 我在互联网上搜索发现了几个机会:线程,异步任务,执行服务,调度执行服务,服务,意向服务,工作管理器,报警管理器,。。。 我想知道哪一个可以推荐给我 到目前为止,我尝试了一个服务与Executor、ExecutorService和

我想定期执行一项任务,目前执行为
runnable
。下一次执行时间是在代码本身中设置的,它的延迟从8分钟变为90分钟。此时准确执行并不重要,延迟几分钟是没有问题的。该任务包括一个网站(
HTML
)的下载和一个字符串的提取。此时不需要UI,但如果应用程序也未运行,则应执行任务

我在互联网上搜索发现了几个机会:
线程
异步任务
执行服务
调度执行服务
服务
意向服务
工作管理器
报警管理器
,。。。 我想知道哪一个可以推荐给我

到目前为止,我尝试了一个
服务
与Executor、ExecutorService和
ScheduledExecutorService
结合使用。不幸的是,任务的执行延迟达60分钟,这太多了

代码示例:

public class MyService extends Service {
private final ScheduledExecutorService scheduler =
        Executors.newScheduledThreadPool(1);   

@Override
public int onStartCommand(Intent intent, int flags, final int startId) {

    final Runnable runnable = new Runnable() {
        @Override
        public void run() {
            //do something regulary
            scheduler.schedule(this,getNewInterval(),MILLISECONDS);
        }
    };

  //create notification, notification channel, startForegorund()


    scheduler.schedule(runnable,1,MINUTES);
    return START_STICKY;
}

“一些分钟的延迟是没有问题的”——延迟可能从几分钟到几小时不等,这取决于设备的状态和它运行的Android版本。看见“不幸的是,任务的执行延迟达60分钟,这太多了”--那么客户端轮询对您来说将不是一个可靠的解决方案。当数据发生变化时,请让您的服务器向应用发送FCM消息。您是否介意发布您的代码?@commonware我无法直接访问服务器。是否没有机会以最高优先级执行此服务而忽略电池消耗和性能?不是直接执行。安卓是一个消费者操作系统,消费者非常大声地说他们厌倦了耗尽电池的应用程序。因此,谷歌已经修改了安卓系统以适应这种情况,各种设备制造商甚至更进一步。您可以进入设置应用程序并将您的应用程序添加到电池优化白名单(例如,在Android 10中,即应用程序和通知>特殊应用程序访问>电池优化)。这可能会有所帮助。然而,用户不需要这样做,某些设备仍然会限制你的应用程序(主要是华为等中国品牌)。