1. 程式人生 > >Android 中三種使用執行緒的方法

Android 中三種使用執行緒的方法

public class

Thread

There are basically two main ways of having aThreadexecute application code. One is providing a new class that extendsThreadand overriding itsrun()method. The other is providing a newThreadinstance with aobject during its creation(提供給它的例項化). In both cases, themethod must be called to actually execute the new

Thread.

Constructs a newThreadwith noRunnableobject and a newly generated name. Constructs a newThreadwith aRunnableobject and a newly generated name.

 在多執行緒程式設計這塊,我們經常要使用Handler,Thread和Runnable這三個類,那麼他們之間的關係你是否弄清楚了呢?

  首先說明Android的CPU分配的最小單元是執行緒,Handler一般是在某個執行緒裡建立的,因而Handler和Thread就是相互繫結的,一一對應。

  而Runnable是一個介面,Thread是Runnable的子類。所以說,他倆都算一個程序。

  HandlerThread顧名思義就是可以處理訊息迴圈的執行緒,他是一個擁有Looper的執行緒,可以處理訊息迴圈。

  與其說Handler和一個執行緒繫結,不如說Handler是和Looper一一對應的。

Handler是溝通ActivityThread/runnable的橋樑。而Handler是執行在主UI執行緒中的,它與子執行緒可以通過Message物件來傳遞資料

1.通過繼承Thread類,並改寫run方法來實現一個執行緒

  1. publicclass MyThread 
    extends Thread {  
  2.     //繼承Thread類,並改寫其run方法
  3.     privatefinalstatic String TAG = "My Thread ===> ";  
  4.     publicvoid run(){  
  5.         Log.d(TAG, "run");  
  6.         for(int i = 0; i<100; i++)  
  7.         {  
  8.             Log.e(TAG, Thread.currentThread().getName() + "i =  " + i);  
  9.         }  
  10.     }  
  11. }  

啟動執行緒:

2.建立一個Runnable物件

  1. publicclass MyRunnable implements Runnable{  
  2.     privatefinalstatic String TAG = "My Runnable ===> ";  
  3.     @Override
  4.     publicvoid run() {  
  5.         // TODO Auto-generated method stub
  6.         Log.d(TAG, "run");  
  7.         for(int i = 0; i<1000; i++)  
  8.         {  
  9.             Log.e(TAG, Thread.currentThread().getName() + "i =  " + i);  
  10.         }  
  11.     }  
  12. }  

啟動執行緒:

  1. // providing a new Thread instance with a Runnable object during its creation.
  2.         new Thread(new MyRunnable()).start();  

3.通過Handler啟動執行緒

  1. publicclass MainActivity extends Activity {  
  2.     privatefinalstatic String TAG = "UOfly Android Thread ==>";  
  3.     privateint count = 0;  
  4.     private Handler mHandler = new Handler();  
  5.     private Runnable mRunnable = new Runnable() {  
  6.         publicvoid run() {  
  7.             Log.e(TAG, Thread.currentThread().getName() + " " + count);  
  8.             count++;  
  9.             setTitle("" + count);  
  10.             // 每3秒執行一次
  11.             mHandler.postDelayed(mRunnable, 3000);  //給自己傳送訊息,自執行
  12.         }  
  13.     };  
  14.     /** Called when the activity is first created. */
  15.     @Override
  16.     publicvoid onCreate(Bundle savedInstanceState) {  
  17.         super.onCreate(savedInstanceState);  
  18.         setContentView(R.layout.main);  
  19.         // 通過Handler啟動執行緒
  20.         mHandler.post(mRunnable);  //傳送訊息,啟動執行緒執行
  21.     }  
  22.       @Override
  23.          protectedvoid onDestroy() {       
  24.              //將執行緒銷燬掉     
  25.              mHandler.removeCallbacks(mRunnable);       
  26.              super.onDestroy();       
  27.          }