У меня есть AsyncTask
для выполнения некоторых операций с базой данных. Проблема заключается в том, что я запускаю AsyncTask
на ThreadPoolExecutor
, когда поток пользовательского интерфейса блокируется. Вот мой код:Android AsyncTask блокирует пользовательский интерфейс
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