-
AsyncTask的注意事項
查看全部 -
asyncTask的執行順序
查看全部 -
在execute執行的參數,傳遞進來的參數作為doInBackground,String 傳遞進來的第一個參數,
先調用PreExcute的操作,然后調用doInBackground的方法開始真正的異步操作原理,最后返回指定的類(onPostexecute)里面.
查看全部 -
doBackground 開啟異步線程進行操作的,基本屬于耗時的操作
onPreExecute 線程開啟之前的操作
前面設置的返回值設置的參數為Bitmap<String ,Void,Bitmap>,前面調用doInBackground后返回Bitmap的值,所以在onPostExcute返回的值為Bitmap,可以去設置UI。
查看全部 -
1.獲取傳遞進來的參數 String url=params[0]只獲取第一位參數
2.網絡的操作,BitmapFactory.decodeStream 將輸入流解析成Bitmap
3.將Bitmap作為返回值
查看全部 -
AsynckTask 加載圖片
查看全部 -
他的執行順序
查看全部 -
onPreExcute執行前的方法
doInBackground? 執行中的方法
onPostExcute 執行后的方法
查看全部 -
AsynckTask的異步參數,和四種方法
查看全部 -
//Main.java: public?class?Main?extends?AppCompatActivity?{ ????ImageView?imageView; ????ProgressBar?progressBar; ????ProgressBar?progressBar2; ????TextView?jishu,?hint; ????static?Handler?myHandler; ????ImageLoad?i1; ????Button?btn; ????@Override ????protected?void?onCreate(@Nullable?Bundle?savedInstanceState)?{ ????????super.onCreate(savedInstanceState); ????????setContentView(R.layout.activity_main); ????????imageView?=?(ImageView)?findViewById(R.id.imageView); ????????progressBar?=?(ProgressBar)?findViewById(R.id.progressBar); ????????progressBar2?=?(ProgressBar)?findViewById(R.id.progressBar2); ????????jishu?=?(TextView)?findViewById(R.id.textView); ????????hint?=?(TextView)?findViewById(R.id.tv); ????????i1?=?new?ImageLoad(imageView,?progressBar,?progressBar2); ????????btn?=?(Button)?findViewById(R.id.button); ????} ????@Override ????protected?void?onPause()?{ ????????super.onPause(); ????????if?(i1?!=?null?&&?i1.getStatus()?==?AsyncTask.Status.RUNNING)?{ ????????????i1.cancel(true); ????????} ????} ????public?void?startload(View?v)?{ ????????btn.setEnabled(false); ????????jishu.setVisibility(View.VISIBLE); ????????myHandler?=?new?Handler()?{ ????????????@Override ????????????public?void?handleMessage(Message?msg)?{ ????????????????super.handleMessage(msg); ????????????????jishu.setText("Loading:"?+?msg.arg1?+?"%"); ????????????????if?(msg.arg1?==?100)?{ ????????????????????jishu.setVisibility(View.INVISIBLE); ????????????????????btn.setVisibility(View.INVISIBLE); ????????????????????hint.setVisibility(View.VISIBLE); ????????????????} ????????????} ????????}; ????????i1.execute("https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it ????????/u=3651717973,1621948329&fm=26&gp=0.jpg"); ????} } //ImageLoad.java: public?class?ImageLoad?extends?AsyncTask<String,?Integer,?Bitmap>?{ ????ImageView?imageView; ????ProgressBar?progressBar; ????ProgressBar?progressBar2; ????static?Message?msg; ????public?ImageLoad(ImageView?imageView,?ProgressBar?progressBar,?ProgressBar?progressBar2)?{ ????????this.imageView?=?imageView; ????????this.progressBar?=?progressBar; ????????this.progressBar2?=?progressBar2; ????} ????@Override ????protected?void?onPreExecute()?{ ????????super.onPreExecute(); ????????progressBar.setVisibility(View.VISIBLE); ????????progressBar2.setVisibility(View.VISIBLE); ????} ????@Override ????protected?Bitmap?doInBackground(String...?params)?{ ????????Bitmap?bitmap?=?null; ????????HttpURLConnection?conn; ????????InputStream?is; ????????String?url?=?params[0]; ????????try?{ ????????????conn?=?(HttpURLConnection)?new?URL(url).openConnection(); ????????????is?=?conn.getInputStream(); ????????????BufferedInputStream?bis?=?new?BufferedInputStream(is); ????????????for?(int?i?=?0;?i?<?100;?i++)?{ ????????????????if?(isCancelled())?{ ????????????????????break; ????????????????} ????????????????publishProgress(i); ????????????????msg?=?Main.myHandler.obtainMessage(); ????????????????msg.arg1?=?i?+?1; ????????????????Main.myHandler.sendMessage(msg); ????????????????Thread.sleep(25); ????????????} ????????????bitmap?=?BitmapFactory.decodeStream(is); ????????????is.close(); ????????????bis.close(); ????????}?catch?(IOException?e)?{ ????????????e.printStackTrace(); ????????}?catch?(InterruptedException?e)?{ ????????????e.printStackTrace(); ????????} ????????return?bitmap; ????} ????@Override ????protected?void?onProgressUpdate(Integer...?values)?{ ????????super.onProgressUpdate(values); ????????progressBar2.setProgress(values[0]); ????} ????@Override ????protected?void?onPostExecute(Bitmap?bitmap)?{ ????????super.onPostExecute(bitmap); ????????if?(isCancelled())?{ ????????????return; ????????} ????????progressBar.setVisibility(View.INVISIBLE); ????????progressBar2.setVisibility(View.INVISIBLE); ????????imageView.setImageBitmap(bitmap); ????} } //activity_main.xml: <?xml?version="1.0"?encoding="utf-8"?> <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android" ????xmlns:app="http://schemas.android.com/apk/res-auto" ????xmlns:tools="http://schemas.android.com/tools" ????android:layout_width="match_parent" ????android:layout_height="match_parent" ????android:orientation="vertical" ????android:padding="10dp" ????tools:context=".Main"> ????<Button ????????android:id="@+id/button" ????????android:layout_width="match_parent" ????????android:layout_height="wrap_content" ????????android:text="Show?the?Image" ????????android:layout_gravity="center" ????????android:onClick="startload"/> ????<TextView ????????android:id="@+id/tv" ????????android:layout_width="wrap_content" ????????android:layout_height="wrap_content" ????????android:visibility="invisible" ????????android:layout_gravity="center" ????????android:text="已成功顯示" ????????android:textSize="40dp"/> ????<ImageView ????????android:id="@+id/imageView" ????????android:layout_width="wrap_content" ????????android:layout_height="wrap_content"/> ????<ProgressBar ????????android:id="@+id/progressBar" ????????android:layout_width="match_parent" ????????android:layout_height="wrap_content" ????????android:layout_marginTop="100dp" ????????android:visibility="invisible"?/> ????<TextView ????????android:id="@+id/textView" ????????android:layout_width="wrap_content" ????????android:layout_height="wrap_content" ????????android:visibility="invisible" ????????android:textSize="20dp" ????????android:layout_marginTop="30dp" ????????android:layout_gravity="center" ????????android:text=""?/> ????<ProgressBar ????????android:id="@+id/progressBar2" ???????? ????????android:layout_width="match_parent" ????????android:layout_height="wrap_content" ????????android:visibility="invisible"?/> </LinearLayout>
查看全部 -
public?void?onPause(){ if?(mtask?!?=?null?||?mtask.getStatus()?==?AsyncTask.Status.RUNNING)?{ ????????mtask.cancel(true); ????????//若AsyncTask對象存在且處于運行狀態,便將此對象標記為 ????????//取消狀態,然后在doInBackground()方法中利用isCancelled() ????????//方法進行相應操作 }
查看全部 -
---轉 1.protected?Bitmap?doInBackground(String...?params)傳進來的是一個可變長的數組。<br><br> 2.String?url?=?params[0];取出對應的URL<br><br> 3.URLConnection?connection:定義網絡連接對象<br><br> 4.InputStream?is?:用于獲取數據的輸入流。<br><br> 5.connection?=?new?URL(url).openConnection():獲取網絡連接對象。<br><br> 6.?is?=?connection.getInputStream():獲取輸入流<br><br> 7.bitmap?=?BitmapFactory.decodeStream();將輸入流解析成bitmap<br><br> 8.is.close();關閉輸入流 9.bis.close()關閉輸入流 <br><br> 通過這些方式就將url所對應的圖片解析成了bitmap AsyncTask<String,Void,Bitmap>三個參數分別為:url類型,進度值類型,返回值類型。 這里的例子暫時不設置進度值,url設置為String類型,又因為我們加載的是一張Bitmap,所以返回的參數類型設置為?Bitmap。 1.?doInBackground(String...params)傳進來的是一個可變長數組,也就是說,我們可以傳進不止一個參數(通過execute()傳進來),這些參數依次存在于這個數組中?,F在只有一個參數,所以只要寫個params[0]取出對應的URL即可。
查看全部 -
回調方法的調用順序
查看全部 -
構建AsyncTask子類的回調方法
查看全部 -
AsyncTask子類的參數
查看全部 -
下載圖片流程查看全部
-
必須在ui線程中創建asynctask實例,并調用execute方法
重寫的方法是系統自動調用 的,也就是我們只能重寫,不能選擇何時調用
每個asynctask只能執行一次,多次調用會引發運行時異常
只有doinbackground才是運行在其他線程(非主線程)更新ui是在主線程
查看全部 -
asynasynctask異步操作的示例
繼承asynctask<string, void ,bitmap>
string?啟動任務時輸入的參數類型
void后臺執行任務時返回的? 進度值類型
bitmap?后臺執行任務后返回? 結果的類型
子類調用execute方法,以URL為傳進去的參數
調用onpreexecute,進行初始化操作,比如將進度條可見
調用doinbackground方法進行真正的異步操作處理,例如耗時操作,返回一個類型給onpostexecute方法
onpostexecute方法(運行在主線程,可進行ui操作,顯示圖片)
查看全部 -
asynctask?<params,progress,result>?
params:啟動任務時輸入的參數類型
progress:后臺執行任務時返回的? 進度值類型
result :后臺執行任務后返回? 結果的類型
asynctask子類必須回調的方法及順序:
2、doinbackground:必須重寫,在里面執行了publishprogress方法,系統才回調3、onprogressupdate方法
1、onpreexecute:后臺耗時任務操作前被調用,用于初始化操作
4、onpostexecute:當doinbackground完成后返回值,系統自動調用onpostexecute,接收值
查看全部
舉報