翻譯自 http://android-developers.blogspot.jp/2009/05/painless-threading.htmlhtml
當你第一次啓動一個Android程序的時候,一個被稱爲"mian"的線程就被自動建立了。它被稱爲主線程或者UI線程,它是很是重要的由於負責分發事件給對應的widget(組件),還包含畫圖的事件。主線程貫穿用戶和Android widget的交互的整個過程。例如,你觸摸了屏幕上的按鈕(Button),UI線程派發(dispatch)觸摸(touch)事件給widget,widget設置爲按下狀態並向事件隊列發送一個無效的請求。UI線程把這個請求彈出棧而且通知widget去重畫它本身。java
public void onClick(View v) { new Thread(new Runnable() { public void run() { Bitmap b = loadImageFromNetwork(); mImageView.setImageBitmap(b); } }).start(); }
public void onClick(View v) { new Thread(new Runnable() { public void run() { final Bitmap b = loadImageFromNetwork(); mImageView.post(new Runnable() { public void run() { mImageView.setImageBitmap(b); } }); } }).start(); }
public void onClick(View v) { new DownloadImageTask().execute("http://example.com/image.png"); } private class DownloadImageTask extends AsyncTask { protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } protected void onPostExecute(Bitmap result) { mImageView.setImageBitmap(result); } }
1>能夠經過泛型指定它的類型:參數,進度值,任務的結果值。2>doInBackGround()方法自動在工做線程中只想可以。3>onPreExecute(),onPostExecute(),onProgressUpdate()方法都在UI線程中執行。4>doInBackground()方法返回的值被看成參數傳遞給onPostExecute()方法。5>你可以在doInBackground()方法裏任什麼時候候調用publishProgress()方法在UI線程中去執行onProgressUpdate()方法。