Android AsyncTask使用詳解
宣告:本文是shunWang原創文章,轉載請註明出處: http://shunji.wang/2017/02/26/asynctask/
要知道怎麼使用AsyncTask首先得知道何為AsyncTask以及AsyncTask的作用,AsyncTask譯成中文就是非同步任務,在其內部封裝了Handler機制,主要用來實現子錢程與UI執行緒的協同工作,比如子執行緒通知UI執行緒更新介面,所以AsyncTask的實質就是Google給我們封裝好的Handler機制。
第一步:繼承
AsyncTask是泛型抽象類,在使用前需要先建立一個類繼承該抽象類,並實現其抽象方法。
public abstract class AsyncTask<Params, Progress, Result> 引數說明: Params:啟動AsyncTask時傳入的資料型別(可為Void); Progerss:表示進度的資料型別(可為Void); Result:任務執行完畢後返回的資料型別(可為Void); 第二步:實現抽象方法doInBackground; @Override protected Object doInBackground(Object[] objects) { return null; } 第三步:重寫三個方法,這四個方法的作用後面一點說,先說步驟; @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onProgressUpdate(Object[] values) { super.onProgressUpdate(values); } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); } 這四個方法的執行順序見下圖: 方法說明: onPreExecute():在非同步任務執行前被呼叫,做準備工作; doInBackground():執行後臺任務,返回結果由onProgressUpdate()接收(注意此方法是在子執行緒中執行); onProgressUpdate():後臺任務執行過程中呼叫publishProgress()方法更新任務進度時被呼叫; onPostExecute():當後臺任務執行完之後被呼叫,用於返回結果; 第四步:呼叫AsyncTask的例項方法execute()執行一個非同步任務
任務的終止: @Override protected void onCancelled() { super.onCancelled(); }
廢話就只說這麼多了,最後上完整的程式碼供大家參考: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void myClick(View view) { //建立非同步任務並執行,引數傳遞給後臺任務doInBackground new MyAsync().execute(1,2,3,4,5,6); } class MyAsync extends AsyncTask<Integer,Integer,Bitmap>{ private ImageView imageView; private ProgressDialog dialog; //在非同步任務執行之前被呼叫,做準備工作。(被UI執行緒呼叫) @Override protected void onPreExecute() { super.onPreExecute(); Log.d("FSLog","onPreExecute"); imageView = (ImageView) findViewById(R.id.imageView); dialog = new ProgressDialog(MainActivity.this); dialog.setMax(100); dialog.setTitle("正在下載。。。"); dialog.show(); } //執行後臺任務 (後臺執行緒呼叫) @Override protected Bitmap doInBackground(Integer... params) { Log.d("FSLog","doInBackground" + params[2]); //publishProgress(100);這裡呼叫這個方法就會觸發onProgressUpdate() HttpURLConnection conn = null; InputStream fis = null; Bitmap bitmap = null; try { URL url = new URL("http://192.168.1.104:8080/HttpUrlConnectionServer/TomCat.jpg"); conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setReadTimeout(3000); conn.setConnectTimeout(3000); conn.setDoOutput(false); conn.setDoInput(true); conn.setUseCaches(true); conn.connect(); if(!(conn.getResponseCode() == HttpURLConnection.HTTP_OK)) { return null; } fis = conn.getInputStream(); bitmap = BitmapFactory.decodeStream(fis); } catch (Exception e) { e.printStackTrace(); if(fis != null) { try { fis.close(); } catch (IOException e1) { e1.printStackTrace(); } } if(conn != null) { conn.disconnect(); } } return bitmap; } //當後臺任務執行完之後被呼叫,用於返回結果 更新UI (被UI執行緒呼叫) @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); Log.d("FSLog","onPostExecute"); imageView.setImageBitmap(bitmap); dialog.dismiss(); } //後臺任務執行過程中呼叫publishProgress()方法更新任務的進度時,被呼叫 (被UI執行緒呼叫) @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); Log.d("FSLog","onProgressUpdate" + values[0]); } } }
相關文章
- Android中AsyncTask使用詳解Android
- 詳解Android中AsyncTask的使用Android
- Android AsyncTask 詳解Android
- Android 多執行緒-----AsyncTask詳解Android執行緒
- AsyncTask面試詳解面試
- android程式與執行緒詳解三:AsyncTaskAndroid執行緒
- AsyncTask機制詳解
- 具體解釋Android中AsyncTask的使用Android
- Android 使用AsyncTask非同步的介紹及多例項並行方案詳解Android非同步並行
- Android 非同步載入——AsyncTask詳談Android非同步
- Android應用AsyncTask處理機制詳解及原始碼分析Android原始碼
- Android入門教程 | AsyncTask 使用介紹Android
- android AsyncTask介紹Android
- Android Gson使用詳解Android
- Android Paint 使用詳解AndroidAI
- Android webview使用詳解AndroidWebView
- Android ViewPager使用詳解AndroidViewpager
- Android Handler機制理解和AsyncTask使用小記Android
- 關於正確使用Android AsyncTask學習整理Android
- Android AsyncTask簡單用法Android
- Android BroadcastReceiver使用詳解AndroidAST
- Android AIDL使用詳解AndroidAI
- 詳解Android RxJava的使用AndroidRxJava
- Android Support Annotations 使用詳解Android
- Android中PopupWindow使用詳解Android
- Android的AsyncTask原始碼分析Android原始碼
- Android-SharedPreferences 使用詳解Android
- Android FragmentTabHost 使用方法詳解AndroidFragment
- Android shape的使用詳解Android
- Android taskAffinity屬性使用詳解Android
- Android 中 HttpURLConnection 使用詳解AndroidHTTP
- Android中HttpURLConnection使用詳解AndroidHTTP
- Android中非同步任務(AsyncTask)Android非同步
- android AsyncTask 的分析與運用Android
- AsyncTask可能有的坑-AndroidAndroid
- Android Retrofit 2.5.0使用基礎詳解Android
- Android shape 的詳解及使用Android
- Android Bitmap快取池使用詳解Android快取