Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android--Handler的使用方法:在子線程中更新界面

Android--Handler的使用方法:在子線程中更新界面

編輯:關於android開發

Android--Handler的使用方法:在子線程中更新界面


本文主要介紹Android的Handler的使用方法。Handler可以發送Messsage和Runnable對象到與其相關聯的線程的消息隊列。每個Handler對象與創建它的線程相關聯,並且每個Handler對象只能與一個線程相關聯。

  1. Handler一般有兩種用途:1)執行計劃任務,你可以再預定的實現執行某些任務,可以模擬定時器。2)線程間通信。在Android的應用啟動時,會創建一個主線程,主線程會創建一個消息隊列來處理各種消息。當你創建子線程時,你可以再你的子線程中拿到父線程中創建的Handler對象,就可以通過該對象向父線程的消息隊列發送消息了。由於Android要求在UI線程中更新界面,因此,可以通過該方法在其它線程中更新界面。

    ◆ 通過Runnable在子線程中更新界面的例子

    在onCreate中創建Handler
    public class HandlerTestApp extends Activity { 
            Handler mHandler; 
            TextView mText; 
            /** Called when the activity is first created. */ 
           @Override 
           public void onCreate(Bundle savedInstanceState) { 
               super.onCreate(savedInstanceState); 
               setContentView(R.layout.main); 
               mHandler = new Handler();//創建Handler 
               mText = (TextView) findViewById(R.id.text0);//一個TextView 
           }
    構建Runnable對象,在runnable中更新界面,此處,我們修改了TextView的文字.此處需要說明的是,Runnable對象可以再主線程中創建,也可以再子線程中創建。我們此處是在子線程中創建的。
    Runnable mRunnable0 = new Runnable() 
        { 
                    @Override 
                    public void run() { 
                            // TODO Auto-generated method stub 
                            mText.setText("This is Update from ohter thread, Mouse DOWN"); 
                    } 
        };

    創建子線程,在線程的run函數中,我們向主線程的消息隊列發送了一個runnable來更新界面。
    private void updateUIByRunnable(){ 
              new Thread()  
             {  
                   //Message msg = mHandler.obtainMessage();  
                  public void run()  
                 { 
    
                       //mText.setText("This is Update from ohter thread, Mouse DOWN");//這句將拋出異常 
                       mHandler.post(mRunnable0);  
                 }  
             }.start();
    
         }

     

    ◆ 用Message在子線程中來更新界面

    用Message更新界面與Runnable更新界面類似,只是需要修改幾個地方。
    實現自己的Handler,對消息進行處理
    
        private class MyHandler extends Handler 
        {
    
            @Override 
            public void handleMessage(Message msg) { 
                // TODO Auto-generated method stub 
                super.handleMessage(msg); 
                switch(msg.what) 
                { 
                case UPDATE://在收到消息時,對界面進行更新 
                    mText.setText("This update by message"); 
                    break; 
                } 
            } 
        }
    
    在新的線程中發送消息     
        private void updateByMessage() 
        { 
            //匿名對象 
             new Thread() 
             { 
                    public void run() 
                    { 
                        //mText.setText("This is Update from ohter thread, Mouse DOWN");
    
                        //UPDATE是一個自己定義的整數,代表了消息ID 
                        Message msg = mHandler.obtainMessage(UPDATE); 
                        mHandler.sendMessage(msg); 
                    } 
             }.start(); 
        }

    1. 上一頁:
    2. 下一頁:
    熱門文章
    閱讀排行版
    Copyright © Android教程網 All Rights Reserved