コンテンツ プロバイダーに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
、このコードを別の場所で同時に実行することはできないはずですよね?
何か不足していますか?