Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android編程心得-Handler與子線程的交互初步

Android編程心得-Handler與子線程的交互初步

編輯:關於Android編程

在編寫項目的時候,本人發現一個關於線程與Handler很容易犯的錯誤。 我有兩個Activity,一個Activity在後台創建了一個線程並且啟動,這個線程對象對應的實體實在另外一個Activity的內部類中定義的,當我在Handler的handleMessage中想更新UI控件的值時,竟然給我報了一個NULL POINT,之前我以為是對應變量的值沒初始化,後來才發現,原來跨Activity調用內部類的時候,一定要在新的Activity裡面啟動對應線程。下面用一個簡單的例子說明,具體代碼如下。 這裡我是在點擊按鈕後啟動線程new MyThread().start()的,之前的這個邏輯我是寫在第一個Activity裡面,所以出現了錯誤。
 
public class main extends Activity {  
      
    private Button myButton01;  
      
    private TextView Result;  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
      
    myButton01=(Button) findViewById(R.id.Button01);  
    
    Result=(TextView) findViewById(R.id.Result);  
      
    //監聽方法  
    myButton01.setOnClickListener(new Button.OnClickListener(){  
  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            new MyThread().start();  
              
//      myHandler.sendEmptyMessage(0);    
        }});  
  
    //創建Handler類的實例  
    Handler  myHandler=new Handler(){  
          
        public void handleMessage(Message msg){  
            super.handleMessage(msg);  
            switch(msg.what){         
            case 2:  
            String s=(String)msg.obj;  
            Result.setText(s);  
                break;  
              
              
            }  
        }  
    };  
      
    class MyThread extends Thread{  
  
        @Override  
        public void run() {  
            // TODO Auto-generated method stub  
            Message msg=new Message();  
            msg.what=2;  
            msg.obj="test";  
            myHandler.sendMessage(msg);  
            super.run();  
        }  
          
    }  
      
      
}  

 


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