我試圖在後臺執行繁重的過程以避免UI滯後。當我在UI線程中執行它時,我沒有響應,但是當我在asyntask中執行時,沒有任何響應,但UI仍然滯後並停留了一段時間。這是我的代碼。Android - Asyntask doInBackground滯後和卡住的UI
private class GenerateTask extends AsyncTask<String, Integer, Void> {
@Override
protected final Void doInBackground(String... lists) {
for (int j = 0; j < 9000; j++) {
final Keyword newKeyword = new Keyword();
newKeyword.setId(j);
newKeyword.setQuestion_answer_id(j);
newKeyword.setKeyword("Keyword ke " + j + " " + UtilHelper.getLocation(j % 9));
newKeyword.setUpdated_at(UtilHelper.getDateTime());
//i think this is the one who causes the lag, but i still need this run on ui thread
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
UtilDB db = new UtilDB(getActivity().getApplicationContext());
db.replaceKeyword(newKeyword);
}
});
}
progressDialog.dismiss();
return null;
}
}
嘗試使用後臺線程,而在數據庫中更新。使用處理程序線程 –
你假設它正在運行一些針對數據庫的東西...但是如果他覺得需要在UI線程上運行它(指示觸摸視圖等),那麼有可能假設是錯誤的 –
是的,其實我需要稍後更新一些用戶界面,這就是爲什麼我需要在UI線程上運行 – huzain07