zoukankan      html  css  js  c++  java
  • 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();
    		}
        	
        }
        
        
    }



  • 相关阅读:
    BZOJ1233 干草堆
    POJ1321棋盘问题【搜索】
    1008
    10.2训练赛
    2014 ACM/ICPC Asia Regional Shanghai Online【未完成】
    hdu5045||2014 ACM/ICPC Asia Regional Shanghai Online【数位dp】
    0926
    poj1007【求逆序数】
    hlg1287数字去重和排序II【hash】
    hlgChocolate Auction【并查集】
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3306166.html
Copyright © 2011-2022 走看看