SQLite DB から呼び出されfillFromDB
た のインスタンスを埋める関数が 1 つあります。ArrayList
list
また、それをクリアして再入力するとThread
思われる別のものもあります。list
Thread
最初のリストがまだリストを埋めている間に他のリストがクリアされることIndexOutOfBoundsException
があり、アダプターで発生することがあるため、リストにいくつかの問題があります。
// This occurs onCreate()
fillFromDb(list);
downloadAndRepopulateList(list);
private void downloadAndRepopulateList(List list) {
new Thread(new Runnable() {
@Override public void run() {
list.clear();
// Some other clode
}
}
}
問題がスレッドセーフではないことが原因であることは知っていますが、これまで使用synchronized
したことはありません。
だから私の質問は:
ダウンロード機能を次のように変更すると:
private void downloadAndRepopulateList(List list) {
new Thread(new Runnable() {
@Override public void run() {
synchronized(list) {
list.clear();
// Some other clode
}
}
}
}
UIThread がリストの入力を完了するのを待ってから、リストfillFromDb()
をクリアして再入力しますか?
そうでない場合、どうすればよいですか?