-1
私はいくつかのデータベース操作を実行するためにAsyncTask
を持っています。問題は、私がThreadPoolExecutor
のAsyncTask
を実行してUIスレッドがブロックされてしまうことです。ここに私のコードです:Android AsyncTaskはUIスレッドをブロックします
private class AddToQueue extends AsyncTask<String, Void, String> {
int qLength = 0;
protected String doInBackground(String... params) {
if (db == null) return null;
db.delete(DBHelper.QUEUETABLE, null, null);
ContentValues cv = new ContentValues();
for (int i = 0; i < qLength; i++) {
cv.put(DBHelper.INDEX, i);
cv.put(DBHelper.PATH, items.get(i).getPath());
cv.put(DBHelper.TITLE, items.get(i).getTitle());
try {
db.insert(DBHelper.QUEUETABLE, null, cv);
} catch (Exception e) {
e.printStackTrace();
}
cv.clear();
}
return "Executed";
}
@Override
protected void onPostExecute(String result) { }
@Override
protected void onPreExecute() {
qLength = list.getAdapter().getCount();
}
@Override
protected void onProgressUpdate(Void... values) { }
と
を置き換えどのように 'AsyncTask'を実行していますか? 'qLength'でやっていることはスレッドセーフではありません。 –
私はちょうどあなたdoloBackgroundを手動で呼び出していないことを願っています – peter
それはブロックされていることをどのように知っていますか?あなたは通常のプールでそれを実行できますか? – Eenvincible