读书人

Android编程经验-Handler与子线程的交

发布时间: 2013-09-08 15:21:21 作者: rapoo

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 stubnew 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{@Overridepublic void run() {// TODO Auto-generated method stubMessage msg=new Message();msg.what=2;msg.obj="test";myHandler.sendMessage(msg);super.run();}        }        }



读书人网 >编程

热点推荐