【问题标题】:Android work manager CursorWindowAllocationException of size Could not allocate CursorWindow 4194304 due to error -13Android 工作管理器 CursorWindowAllocationException of size 由于错误 -13 无法分配 CursorWindow 4194304
【发布时间】:2021-06-22 21:39:54
【问题描述】:

如果有人遇到类似问题。将不胜感激的解决方案

使用的组件: 使用的版本:android.arch.work:work-runtime:architectureWork:1.0.1

有错误日志:

android.database.CursorWindowAllocationException:
  at android.database.CursorWindow.nativeCreate (CursorWindow.java)
  at android.database.CursorWindow.<init> (CursorWindow.java:145)
  at android.database.sqlite.SQLiteCursor.clearOrCreateWindow (SQLiteCursor.java:319)
  at android.database.sqlite.SQLiteCursor.fillWindow (SQLiteCursor.java:159)
  at android.database.sqlite.SQLiteCursor.getCount (SQLiteCursor.java:152)
  at androidx.work.impl.model.WorkSpecDao_Impl.getAllUnfinishedWork (WorkSpecDao_Impl.java:1203)
  at androidx.work.impl.WorkerWrapper.resolve (WorkerWrapper.java:427)
  at androidx.work.impl.WorkerWrapper.resetPeriodicAndResolve (WorkerWrapper.java:561)
  at androidx.work.impl.WorkerWrapper.handleResult (WorkerWrapper.java:447)
  at androidx.work.impl.WorkerWrapper.onWorkFinished (WorkerWrapper.java:335)
  at androidx.work.impl.WorkerWrapper$2.run (WorkerWrapper.java:310)
  at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
  at java.lang.Thread.run (Thread.java:919)


android.database.CursorWindowAllocationException: Could not allocate CursorWindow '/data/user/0/com.testapp/databases/androidx.work.workdb' of size 4194304 due to error -13.
android.database.CursorWindow.nativeCreate(:-2)
android.database.CursorWindow.<init>(CursorWindow.java:145)
android.database.sqlite.SQLiteCursor.clearOrCreateWindow(SQLiteCursor.java:319)
android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:159)
android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:152)
android.database.AbstractCursor.moveToPosition(AbstractCursor.java:232)
android.database.AbstractCursor.moveToFirst(AbstractCursor.java:271)
be.b(SourceFile:16) (be = androidx.work.impl.model.WorkSpecDao_Impl)
androidx.work.impl.q.k(SourceFile:2)
androidx.work.impl.q.h(SourceFile:54)
androidx.work.impl.q.run(SourceFile:3)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
java.lang.Thread.run(Thread.java:919)

【问题讨论】:

  • 现在是 2021 年,你不应该再使用 `android.arch.work` 或支持库了。在这一点上,您实际上已经过时多年,并且没有得到任何错误修复。您需要切换到 AndroidX。

标签: android multithreading sqlite android-room android-workmanager


【解决方案1】:

问题似乎是它无法获得 4M(4194304 字节)CursorWindow。我怀疑不是因为没有足够的内存,而是它无法分配文件可能是因为剩下的文件句柄不足。

我会查看您的代码并确保在您完成游标后关闭游标(使用游标close 方法),尤其是查看循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2017-08-04
    • 2019-03-10
    • 2012-03-01
    相关资源
    最近更新 更多