1,ProgressDialog
?? ?>?? ??? ?//使用對象? 設置標題
?? ??? ??? ?progressDialog.setTitle("標題");
?? ??? ??? ?//設置圖標
?? ??? ??? ?progressDialog.setIcon(R.drawable.ic_launcher);
?? ??? ??? ?//設置展示的內容
?? ??? ??? ?progressDialog.setMessage("正在下載請稍等....");
?? ??? ??? ?//設置樣式
?? ??? ??? ?progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
?? ??? ??? ?//展示
?? ??? ??? ?progressDialog.show();
?? ??? ??? ?
2,UI線程和工作線程
?? ?>Ui線程也是Main線程? 負責會在UI界面和事件分發
?? ?倆個主要要素:
?? ??? ??? ?>1,在Ui線程不能做阻塞操作? (在主線程阻塞超過5s程序出錯? "程序無反應")
?? ??? ??? ?>2,在主線程以外的線程(子線程)不能更新UI
3, 什么是異步任務
?? ?>在子線程做耗時操作? 將結果回調到主線程
4, 為什么要使用異步任務
?? ?
?? ?>1,在Ui線程不能做阻塞操作? (在主線程阻塞超過5s程序出錯? "程序無反應")? 4.0以后? 不允許在主線程下載
?? ?>2,在主線程以外的線程(子線程)不能更新UI
?? ? * 1,創建一個類 繼承AsyncTask,同時聲明三個參數
?? ? * Params:子線程執行方法里參數類型
?? ? * Progress;子線程執行任務的進度類型 如果不想展示進度? Void
?? ? * Result:子線程執行任務的結果類型
?? ? *
?? ? * 2,實現核心方法
?? ? * doInBackground(String... params){}
?? ? *
?? ? * onPostExecute(byte[] result)
?? ? *
?? ? * 3,在主線程中執行異步請求
?? ?>完整的AsyncTask
?? ?public class MyAsyncTask extends AsyncTask<String, Integer, List<String>>{
?? ??? ?
?? ??? ?/**
?? ??? ? * 在首次執行異步任務時? 調用此方法?? 做初始化操作
?? ??? ? */
?? ??? ?@Override
?? ??? ?protected void onPreExecute() {
?? ??? ??? ?// TODO Auto-generated method stub
?? ??? ??? ?super.onPreExecute();
?? ??? ?}
?? ??? ?/**
?? ??? ? * 在子線程中執行?? 做耗時操作
?? ??? ? */
?? ??? ?@Override
?? ??? ?protected List<String> doInBackground(String... params) {
?? ??? ??? ?// TODO Auto-generated method stub
?? ??? ??? ?//publishProgress(values)
?? ??? ??? ?return null;
?? ??? ?}
?? ??? ?/**
?? ??? ? * 更新進度的方法?? 在doInBackground中 執行publishProgress(values)? 將進度值發送給onProgressUpdate
?? ??? ? */
?? ??? ?@Override
?? ??? ?protected void onProgressUpdate(Integer... values) {
?? ??? ??? ?// TODO Auto-generated method stub
?? ??? ??? ?super.onProgressUpdate(values);
?? ??? ?}
?? ??? ?
?? ??? ?/**
?? ??? ? * 在主線程中更新UI 在執行完doInBackground之后執行 onPostExecute
?? ??? ? */
?? ??? ?@Override
?? ??? ?protected void onPostExecute(List<String> result) {
?? ??? ??? ?// TODO Auto-generated method stub
?? ??? ??? ?super.onPostExecute(result);
?? ??? ?}
?? ??? ?
?? ??? ?
?? ??? ?//點擊其他按鈕? 取消AsyncTask時? 執行此方法
?? ??? ?@Override
?? ??? ?protected void onCancelled(List<String> result) {
?? ??? ??? ?// TODO Auto-generated method stub
?? ??? ??? ?super.onCancelled(result);
?? ??? ?}
?? ??? ?
?? ??? ?
?? ??? ?
?? ?}
5, 設置View的顯示與隱藏
?? ?>visibility=""
?? ??? ?>gone:??????? 隱藏 不占空間
?? ??? ?>visible????? 顯示
?? ??? ?>invisible??? 隱藏? 占空間
?? ?>setVisibility()
?? ??? ?>View.GONE
?? ??? ?>View.VISIBLE
?? ??? ?>View.INVISIBLE
6,? AsyncTask注意事項:
?? ?>1,AsyncTask實例只能調用一次
?? ?>2,必須在Ui線程得到AsyncTask對象
?? ?>3,AsyncTask方法 系統自動調用
?? ?>4,數據進行交互(子線程和主線程交互)AsyncTask,否則開啟一個線程就行
?? ?>5,異步任務必須在UI線程啟動
?? ?
?? ?
?? ??? ?
?? ????
轉載于:https://www.cnblogs.com/muyuge/p/6152285.html