-1
我有一個AsyncTask
執行一些數據庫操作。問題是當我執行AsyncTask
時ThreadPoolExecutor
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'做的事情不是線程安全的。 –
我只是希望你不要手動調用doInBackground – peter
你怎麼知道它被阻塞?你能在普通游泳池上執行它嗎? – Eenvincible