当前位置:操作系统 > 安卓/Android >>

Android编程心得-Handler与子线程的交互初步

在编写项目的时候,本人发现一个关于线程与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();  
        }  
          
    }  
      
      
}  

 


补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,