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
Java Android WorkManager-应用程序终止后无法正常工作_Java_Android_Android Service_Alarmmanager_Android Workmanager - Fatal编程技术网

Java Android WorkManager-应用程序终止后无法正常工作

Java Android WorkManager-应用程序终止后无法正常工作,java,android,android-service,alarmmanager,android-workmanager,Java,Android,Android Service,Alarmmanager,Android Workmanager,我创建了简单的workManager,我希望它在后台每1秒为循环工作50次,所以它将每1秒迭代一次循环并显示日志。首先让我介绍一下我的代码 这是WorkManager类 public class WorkerClass extends Worker { private static String TAG = "work_tag"; public WorkerClass(@NonNull Context context, @NonNull WorkerParameters wo

我创建了简单的workManager,我希望它在后台每1秒为循环工作50次,所以它将每1秒迭代一次循环并显示日志。首先让我介绍一下我的代码

这是WorkManager类

public class WorkerClass extends Worker {

    private static String TAG = "work_tag";

    public WorkerClass(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
    }

    @NonNull
    @Override
    public Result doWork() {
        try {
            loop();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return Result.success();
    }

    private void loop() throws InterruptedException {
        for (int i = 0; i < 50; i++) {
            Thread.sleep(1000);
            Log.d(TAG, "Working: " + i);
        }
    }
}
如果有什么问题,请通知我。所以当我启动应用程序时,它会像这样每1秒显示一次日志

D/work_tag: Working: 1
D/work_tag: Working: 2
D/work_tag: Working: 3
D/work_tag: Working: 4
D/work_tag: Working: 5
D/work_tag: Working: 25
D/work_tag: Working: 0
D/work_tag: Working: 26
D/work_tag: Working: 1
D/work_tag: Working: 27
D/work_tag: Working: 2
D/work_tag: Working: 28
D/work_tag: Working: 3
D/work_tag: Working: 29
D/work_tag: Working: 4
好的,是吗?所以,当我关闭应用程序(onDestroy)时,30-35秒后,循环会在后台再次启动。之后,当我打开应用程序时,循环会再次启动,而不会完成上一个循环

例如,在后台循环中,循环重复了25次50次,如果我打开应用程序,日志将如下所示

D/work_tag: Working: 1
D/work_tag: Working: 2
D/work_tag: Working: 3
D/work_tag: Working: 4
D/work_tag: Working: 5
D/work_tag: Working: 25
D/work_tag: Working: 0
D/work_tag: Working: 26
D/work_tag: Working: 1
D/work_tag: Working: 27
D/work_tag: Working: 2
D/work_tag: Working: 28
D/work_tag: Working: 3
D/work_tag: Working: 29
D/work_tag: Working: 4
看到了吗?打开app2后,循环开始异步迭代。 所以第一个问题是如何避免这种情况发生(2个异步循环),第二个问题是为什么在销毁应用程序后,我必须等待30-35秒才能在后台运行循环

我正在安卓6.0中测试这个


在android 4.4中,后台任务根本不进行调度。

此时您正在运行两个不同的worker副本-每次活动开始时,您都在排队等待一个新的WorkRequest。如果您只想使用一份副本,请使用唯一的工作请求:

是的,谢谢,这很有效。但还有一个问题。为什么后台服务在应用程序终止后30-40秒后启动,而不是立即启动?为什么android 4.4中的后台服务根本没有启动?但当我重新启动手机时,任务开始执行。后台工作由操作系统进行备份。至于4.4问题,我认为我们需要更多的细节。请针对官方发行跟踪程序提交错误: