我正在從服務器上下載文件,然後解析並在本地數據庫中插入,而此操作使用進度條顯示操作的進度。由於文件非常大,需要2-4分鐘進行解析,因爲這樣我得到了ANR進度條和進度條在下載完成後沒有得到更新,它只顯示50%的進度。如何避免這種ANR?我附上我的代碼如下...在Android的AsyncTask中長時間運行XML解析時如何避免ANR?
@Override
protected void onPreExecute()
{
flag = false;
progressCount = 0;
ProgressDialog progressBar = DdownoadProgressBar(context,
progressCount);
progressBar.show();
}
@Override
protected Integer doInBackground(String... urls) {
checkNetworkConnection();
if (connectionFlag) {
downloadFile1();
progressCount = 1;
publishProgress(progressCount);
downloadFile2();
progressCount = 2;
publishProgress(progressCount);
downloadFile3();
progressCount = 3;
publishProgress(progressCount);
downloadFile4();
progressCount = 4;
publishProgress(progressCount);
downloadFile5();
progressCount = 5;
publishProgress(progressCount);
downloadFile6();
progressCount = 6;
publishProgress(progressCount);
downloadflag = true;
}
return null;
}
@Override
protected void onProgressUpdate(Integer... progress)
{
Log.v(TAG, "In progressUpdate...");
progressBar.setProgress(progressCount);
}
@Override
protected void onPostExecute(Integer progress) {
if (downloadflag) {
try {
Log.v(TAG, "Inside onPostExecute....");
parseFile1();
progressCount=7;
publishProgress(progressCount);
parseFile2();
progressCount=8;
publishProgress(progressCount);
parseFile3();
progressCount=9;
publishProgress(progressCount);
parseFile4();
progressCount=10;
publishProgress(progressCount);
parseFile5();
progressCount=11;
publishProgress(progressCount);
parseFile6();
progressCount=12;
publishProgress(progressCount);
progressBar.dismiss();
Toast.makeText(SynchronizeData.this,"Data is successfully downloaded from server.......", Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
}
} else {
progressBar.dismiss();
Toast.makeText(
getApplicationContext(),
"File is not downloaded....Error in network connection...........",Toast.LENGTH_LONG).show();
Log.v(TAG, "File is not downloaded...............");
}
}
不解析onPostExecute? – njzk2
我想解析並插入數據庫爲此目的,我必須通過上下文,因此我不能在背景中執行它.... – Narendra