android - 即使应用程序被杀死或在后台,如何连续执行方法
问题描述
即使应用程序不在前台,我也想继续执行一个方法。为此,我使用了 WorkManager。但问题是最小时间延迟是 15 分钟,我们不能减少这个值。下面是代码。
final PeriodicWorkRequest periodicWorkRequest
= new PeriodicWorkRequest.Builder(MyWorker.class, 10, TimeUnit.SECONDS)
.build();
WorkManager.getInstance().enqueue(periodicWorkRequest);
public class MyWorker extends Worker {
public MyWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
//Do work
return Result.success();
}}
我怎样才能做到这一点?哪个是最好的方法?
解决方案
对于如此短的间隔(10 秒)WorkManager
或AlarmManager
不适合。使用Java 执行器:
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// Do work
}
}, 0, 10, TimeUnit.SECONDS);
完成后不要忘记关闭执行程序:
executor.shutdown()
推荐阅读
- javascript - TestCafe - 选择器/断言可以并行运行吗?
- angular - Angular 5 将裁剪后的文件上传到 PHP 后端
- javascript - 如何检查用户是否是管理员?
- azure-durable-functions - Azure 持久功能 - 端口不可用
- html - 从 css 设置 html 标签属性
- python - NameError:名称'start_time_of_the_script'未定义
- python - 为什么 5^(4-4) + 9 和 (5^(4-4)) + 9 的结果不同?
- python - 如何在 python 3 中生成 macOS Cocoa 日期/时间?
- c# - 将 zip 文件的内容作为 StorageFile 对象读取而不提取?
- ruby - 我试图理解 Ruby 中的 .freeze 概念。