public class Handler22Activity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        setContentView(R.layout.main);
        System.out.println("dang qian BB xiancheng ID:"+Thread.currentThread().getId());
        System.out.println("dang qian BB xiancheng name:"+Thread.currentThread().getName());
        
        HandlerThread ht =new HandlerThread("ht");
        ht.start();
        t t1 =new t(ht.getLooper());
        Message mess=t1.obtainMessage();
        //mess.sendToTarget();
        t1.sendMessage(mess);
    }
    class t extends Handler{
      //public t(){};
      public t(Looper looper){
      super(looper);
      }
     
         public void handlemessage(Message mess){
          System.out.println("dang qian AA xiancheng ID:"+Thread.currentThread().getId());
          System.out.println("dang qian AA xiancheng name:"+Thread.currentThread().getName());
         
         }
     }
    
}
为什么打印不出dang qian AA xiancheng ID:这语句,好像handlemessage没有调用,初学android,大家帮我看看吧!谢谢。。

解决方案 »

  1.   

     HandlerThread ht =new HandlerThread("ht");
      ht.start();
      t t1 =new t(ht.getLooper());
      Message mess=t1.obtainMessage();
      //mess.sendToTarget();
      t1.sendMessage(mess);试试把这段代码放到一个按钮中点击触发,不要直接写在onCreate中。
      

  2.   

    是否需要设置优先级?
     ht.setPriority(Thread.MIN_PRIORITY);
      

  3.   

    这个打印出来的不再console中  在logcat中看
      

  4.   

    log里面没有,只有前面主线程的那两句
    我也感觉没问题,可就是出不来。。
    哎。。
    不知道怎么回事啊
      

  5.   

    发现其他程序 只要用到message也是这样的,根本就没调用,代码又没报错,彻底无语了
    是不是我编译环境什么的问题
    那位大哥指点一下啊
    谢谢了
      

  6.   


                   @Override
    public void dispatchMessage(Message msg) {
    System.out.println("dang qian AA xiancheng ID:" + Thread.currentThread().getId());
    System.out.println("dang qian AA xiancheng name:" + Thread.currentThread().getName());
    super.dispatchMessage(msg);
    }
    用这个监听
      

  7.   

    还有个问题  ,今天才看到,Handler的是handleMessage而不是你的handlemessage你这个充其量是你自己的方法,而不是override的方法
      

  8.   

    谢谢楼上。。已解决
    但还有个问题想请教一下
    下面代码关于handler.removeCallbacks(updateThread);
    为什么i大于6后 ,继续点按钮还会执行线程,不是已经将线程移出队列了嘛
    public class HandlerActivity extends Activity {
        /** Called when the activity is first created. */
    //声明一个按钮控件
    private Button startButton = null;
    public int i=0;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            startButton = (Button)findViewById(R.id.startButton);
            startButton.setOnClickListener(new StartButtonListener());
                   
        }
        class StartButtonListener implements OnClickListener{ @Override
    public void onClick(View v) {
    //调用Handler的post方法,将要执行的线程对象添加到队列当中
    if(i<6)
    handler.post(updateThread);
    else
    handler.removeCallbacks(updateThread);
    }
        
        }
        
        //创建一个Handler对象
        Handler handler  = new Handler();
        //将要执行的操作写在线程对象的run方法当中
        Runnable updateThread =  new Runnable(){
            int i=0;
    @Override
    public void run() {
    i=i+1;
    System.out.println("UpdateThread:"+i);

    }
        
        };
    }
      

  9.   


    public class HandlerActivity extends Activity {
      /** Called when the activity is first created. */
    //声明一个按钮控件
    private Button startButton = null;
    public int i=0;
      @Override
      public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      startButton = (Button)findViewById(R.id.startButton);
      startButton.setOnClickListener(new StartButtonListener());
       
      }
      class StartButtonListener implements OnClickListener{@Override
    public void onClick(View v) {
    //调用Handler的post方法,将要执行的线程对象添加到队列当中
    if(i<6)
    handler.post(updateThread);
    else
    handler.removeCallbacks(updateThread);
    }
     
      }
       
      //创建一个Handler对象
      Handler handler = new Handler();
      //将要执行的操作写在线程对象的run方法当中
      Runnable updateThread = new Runnable(){
      int i=0;
    @Override
    public void run() {
    i=i+1;
    System.out.println("UpdateThread:"+i);}
     
      };
    }
    红色的i一直为0所以一直调用handler post
    而runnable里面的i改变的是你runnable中声明的  与全局的无关。如果要改  删除runnable中的i=0
      

  10.   

    public int i=0;
    if(i<6)
    int i=0;
    i=i+1;