Android 分配2048 kb的WorkManager光标窗口失败

Android 分配2048 kb的WorkManager光标窗口失败,android,android-workmanager,Android,Android Workmanager,我使用WorkManager版本android.arch.work:work runtime:1.0.0-beta03。我使用此WorkManager使用OneTimeWorker以动态间隔时间将文件上载到服务器 我就是这么做的。希望你们能检查一下,告诉我哪里出了问题,还有其他的解决方法 首先,我提出一个工作要求 OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(MyWorkRequest.class)

我使用WorkManager版本
android.arch.work:work runtime:1.0.0-beta03
。我使用此WorkManager使用OneTimeWorker以动态间隔时间将文件上载到服务器

我就是这么做的。希望你们能检查一下,告诉我哪里出了问题,还有其他的解决方法

首先,我提出一个工作要求

    OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(MyWorkRequest.class)
            .setInitialDelay(0), TimeUnit.SECONDS)
            .addTag("UploadData")
            .build();

    WorkManager
            .getInstance()
            .getWorkInfoByIdLiveData(workRequest.getId())
            .observeForever(workInfoObserverBackground);
    WorkManager
            .getInstance()
            .enqueueUniqueWork("UploadData", ExistingWorkPolicy.REPLACE, workRequest);
然后,定义Observer以听取其结果。我也从这里开始下一次跑步

workInfoObserverBackground = workInfo -> {
            if (workInfo != null){
                switch (workInfo.getState()) {
                    case SUCCEEDED:
                    case FAILURE:
                        WorkManager.getInstance().getWorkInfoByIdLiveData(workRequest.getId()).removeObserver(workInfoObserverBackground);
                        WorkManager.getInstance().cancelUniqueWork("UploadData");
                        WorkManager.getInstance().cancelAllWorkByTag("UploadData");
                        workRequest = new OneTimeWorkRequest.Builder(MyWorkRequest.class)
                                .setInitialDelay(next_interval_time_received_from_api), TimeUnit.SECONDS)
                                .addTag("UploadData")
                                .build();
                        WorkManager
                                .getInstance()
                                .getWorkInfoByIdLiveData(workRequest.getId())
                                .observeForever(workInfoObserverBackground);
                        WorkManager
                                .getInstance()
                                .enqueueUniqueWork("UploadData", ExistingWorkPolicy.REPLACE, workRequest);
                        break;
                }
            }
        };
几分钟后(我无法记录它,因为它是随机发生的),它崩溃了,这是从logcat收集的stacktrace

1-15 21:46:14.806 25964-26054/com.example.app E/AndroidRuntime: FATAL EXCEPTION: pool-8-thread-1
Process: com.example.app, PID: 25964
android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. 
at android.database.CursorWindow.<init>(CursorWindow.java:108)
at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:139)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
at androidx.work.impl.model.WorkSpecDao_Impl.getInputsFromPrerequisites(WorkSpecDao_Impl.java:1112)
at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:171)
at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:124)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
1-15 21:46:14.806 25964-26054/com.example.app E/AndroidRuntime:FATAL EXCEPTION:pool-8-thread-1
进程:com.example.app,PID:25964
android.database.CursorWindowAllocationException:2048 kb的光标窗口分配失败。
位于android.database.CursorWindow(CursorWindow.java:108)
位于android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)
位于android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:139)
位于android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
位于androidx.work.impl.model.WorkSpecDao_impl.getInputsFromPremissions(WorkSpecDao_impl.java:1112)
位于androidx.work.impl.workerRapper.runWorker(workerRapper.java:171)
在androidx.work.impl.workerRapper.run(workerRapper.java:124)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
运行(Thread.java:818)
我的间歇时间总是1秒。也许旧任务与下一个任务挂起,无法销毁