Android 无法分配游标窗口'/位置db';由于错误-24,大小为2097152 例外信息 部件代码:
我能做些什么来解决这个问题?我会很感激的 这些代码没有问题。我发现其他代码加载这些异常。 我使用intentservice和AlarmManager进行循环服务。 我放弃了经理。然后像这样更改代码: 它起作用了。异常不再出现Android 无法分配游标窗口'/位置db';由于错误-24,大小为2097152 例外信息 部件代码:,android,greendao,Android,Greendao,我能做些什么来解决这个问题?我会很感激的 这些代码没有问题。我发现其他代码加载这些异常。 我使用intentservice和AlarmManager进行循环服务。 我放弃了经理。然后像这样更改代码: 它起作用了。异常不再出现 new Thread(new Runnable() { @Override public void run() { mRequestDataItem = DBHelper.getInstance(getApplicat
new Thread(new Runnable() {
@Override
public void run() {
mRequestDataItem = DBHelper.getInstance(getApplicationContext()).getTopFailedNetRequestInDataBase();
while (isRunning) {
CommonUtilLog.d("reRequestTask Loop", String.valueOf(countLoop++));
if (!isPosting) {
if (reRequestTask == null) {
if (mRequestDataItem != null) {
CommonUtilLog.d("reRequestTask", String.valueOf(count++));
reRequestTask = new ReRequestTask(mRequestDataItem);
}
}
}
try {
Thread.sleep(CommonConstant.THREAD_SLEEP_RETRY_REQUEST_SERVICE);
} catch (InterruptedException e) {
e.printStackTrace();
}
mRequestDataItem = DBHelper.getInstance(getApplicationContext()).getTopFailedNetRequestInDataBase();
}
}
}).start();
找到问题的方法:
来自这篇博客的博主:
“差异法”,逐步注释代码,找出出错的真凶. “由于错误,无法分配大小为2097152的游标窗口…”当光标未关闭且在循环中被调用时发生。
未显示光标错误以避免数据泄漏记录。
为了了解代码中的错误,我添加了以下行。
当活动打开时,它正好指向导致错误的行。
if (BuildConfig.DEBUG) {
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
}
(1)Could not create epoll instance. errno=24
(2)CursorWindow(26673): Could not allocate CursorWindow of size 2097152 due to error -24
(3)F/Looper (26673): Could not create wake pipe. errno=24
I/qtaguid (20825): Failed write_ctrl(s 0 10051) res=-1 errno=1
FATAL EXCEPTION: Thread-118`enter code here`
new Thread(new Runnable() {
@Override
public void run() {
mRequestDataItem = DBHelper.getInstance(getApplicationContext()).getTopFailedNetRequestInDataBase();
while (isRunning) {
CommonUtilLog.d("reRequestTask Loop", String.valueOf(countLoop++));
if (!isPosting) {
if (reRequestTask == null) {
if (mRequestDataItem != null) {
CommonUtilLog.d("reRequestTask", String.valueOf(count++));
reRequestTask = new ReRequestTask(mRequestDataItem);
}
}
}
try {
Thread.sleep(CommonConstant.THREAD_SLEEP_RETRY_REQUEST_SERVICE);
} catch (InterruptedException e) {
e.printStackTrace();
}
mRequestDataItem = DBHelper.getInstance(getApplicationContext()).getTopFailedNetRequestInDataBase();
}
}
}).start();
if (BuildConfig.DEBUG) {
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
}