4

SQLite DB から呼び出されfillFromDBた のインスタンスを埋める関数が 1 つあります。ArrayListlist

また、それをクリアして再入力すると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()をクリアして再入力しますか?

そうでない場合、どうすればよいですか?

4

2 に答える 2