在Android中實現非同步任務機制有兩種,Handler和AsyncTask。優缺點自己百度,推薦使用AsyncTask。 先執行onPreExecute(),然後doInBackground(),當裡面有publishProgress()調用的時候觸發onProgressUpdate(),最後執行 ...
在Android中實現非同步任務機制有兩種,Handler和AsyncTask。優缺點自己百度,推薦使用AsyncTask。
private ProgressDialog dialog;
//新建一個對話框,不顯示
dialog = new ProgressDialog(this);
dialog.setTitle("溫馨提示");
dialog.setMessage("數據載入中,請耐心等待...");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//條形進度條
dialog.setCancelable(false);//能否在顯示過程中關閉
ok,ProgressDialog 準備好了。
寫一個內部類繼承AsyncTask。
// todo 進度條,下載等待提示,new一個對象執行execute方法即可。 class DataAsy extends AsyncTask<Integer,Integer,Boolean>{
//處理耗時操作 @Override protected Boolean doInBackground(Integer... integers) { //publishProgress(5); return true; }
//啟動非同步類後首先會執行 @Override protected void onPreExecute() { super.onPreExecute(); dialog.show();//顯示對話框 } //任務結束後執行,用來關閉提示框 @Override protected void onPostExecute(Boolean aBoolean) { super.onPostExecute(aBoolean); if(!aBoolean){ Toast.makeText(EnterActivity.this,"下載出錯,請重新進入下載",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(EnterActivity.this,"下載完成",Toast.LENGTH_SHORT).show(); } dialog.dismiss(); } //當有 publishProgress(value)發來的數據時觸發,更新UI @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); dialog.setProgress(values[0]);//更新進度條,運行在UI } }
先執行onPreExecute(),然後doInBackground(),當裡面有publishProgress()調用的時候觸發onProgressUpdate(),最後執行onPostExecute()。
最後哪裡需要執行耗時操作調用一下execute()方法即可,例如
new DataAsy().execute(1);就可以調用非同步方法了。