我有一个AsyncTask
查询内容提供者并在onPostExecute()
该任务中进行一些额外处理的。我有一个很难重现的异常的堆栈跟踪,但我想防范这种情况或修复代码。代码如下:
int i = 0;
mIds = new long[cursor.getCount()];
while (cursor.moveToNext()) {
mIds[i++] = cursor.getLong(COLUMN_ID);
}
崩溃发生在循环中的线路上。在我看来,这可能发生的唯一方法是:
cursor.getCount()
正在返回不正确的计数。cursor
在此循环执行时更改,但我认为这是不可能的,因为cursor
它是一个局部变量。也许底层的某些东西cursor
发生了我不知道的变化。mIds
已经改变。这应该是不可能的,因为我们在 UI 线程上运行,并且这是唯一为该变量分配新值的地方。由于在 UI 线程上运行的性质,onPostExecute
这段代码不可能同时在其他地方运行,对吧?
我错过了什么吗?