Handler處理長時間事件

當我們在處理一些比較長時間的事件時候,比如讀取網絡或者數據庫的數據時候,就要用到Handler,有時候為瞭不影響用戶操作應用的流暢還要開多一個線程來區別UI線程,在新的線程裡面處理長時間的操作。開發的時候遇到數據處理都可以這樣用handler,靈活修改一下就可以做各種效果瞭。
第一步:ProgressDialog彈出旋轉框來提示長時間操作。
第二步:開多一個線程處理長時間操作,這裡讓線程睡覺10秒。
第三部:長時間操作結束後給handler發送一個消息,可以是一個整數,如果這個Activity有多個handler,可以定義多個整數成員變量來區別不同的消息。
第四步:在定義Handler的handlerMessage方法裡面把ProgressDialog對象dismiss()掉,把彈出框消滅表示操作完成。
代碼如下:
[java]
public class Android_HandlerActivity extends Activity { 
    /** Called when the activity is first created. */ 
    //聲明變量 
    private Button b1; 
    private ProgressDialog pd; 
    //定義handler對象 
    private Handler handler = new Handler(){ 
        //當有消息發送出來的時候就執行Handler的這個方法 
        @Override 
        public void handleMessage(Message msg) { 
            // TODO Auto-generated method stub 
            super.handleMessage(msg); 
            //隻要執行到這裡就關閉對話框 
            pd.dismiss(); 
        } 
         
    }; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
         
        //Resources res = this.getResources(); 
         
      //查看UI組件所在的線程名 
      Log.i("tag", "onCreate()–>"+Thread.currentThread().getName()); 
 
 
      //定義UI組件 
      b1= (Button)findViewById(R.id.Button01); 
       
      //給按鈕綁定單擊事件監聽器 
      b1.setOnClickListener(new View.OnClickListener() { 
         
        @Override 
        public void onClick(View v) { 
            // TODO Auto-generated method stub 
            //點擊按鈕後去處理長耗時操作 
            processThread(); 
        } 
      }); 
    } 
    protected void processThread() { 
        // TODO Auto-generated method stub 
        //構建一個下載進度條 
        pd= ProgressDialog.show(Android_HandlerActivity.this, "下載文件", "正在下載……"); 
        Log.i("tag", "processThread()–>"+Thread.currentThread().getName()); 
        new Thread(){ 
 
 
            @Override 
            public void run() { 
                Log.i("tag", "run()–>"+Thread.currentThread().getName()); 
 
 
                //在新線程裡執行長耗時方法 
                longTimeMethod(); 
 
 
                //執行完畢後給handler發送一個空消息 
                handler.sendEmptyMessage(0); 
            } 
             
        }.start(); 
    } 
    //模擬下載文件的長耗時方法 
    protected void longTimeMethod() { 
        // TODO Auto-generated method stub 
        try { 
 
 
            Log.i("tag", "longTimeMethod–>"+Thread.currentThread().getName()); 
 
 
            Thread.sleep(10000); 
 
 
            } catch (InterruptedException e) { 
 
 
            e.printStackTrace(); 
 
 
            } 
    } 

main.xml隻是一個簡單的Button:
[html]
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
 
    <Button 
        android:id="@+id/Button01" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello" /> 
 
</LinearLayout> 
最後運行圖片如下:

摘自 heirenheiren的專欄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *