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中,即应用程序和通知>特殊应用程序访问>电池优化)。这可能会有所帮助。然而,用户不需要这样做,某些设备仍然会限制你的应用程序(主要是华为等中国品牌)。