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,大家帮我看看吧!谢谢。。
/** 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,大家帮我看看吧!谢谢。。
ht.start();
t t1 =new t(ht.getLooper());
Message mess=t1.obtainMessage();
//mess.sendToTarget();
t1.sendMessage(mess);试试把这段代码放到一个按钮中点击触发,不要直接写在onCreate中。
ht.setPriority(Thread.MIN_PRIORITY);
我也感觉没问题,可就是出不来。。
哎。。
不知道怎么回事啊
是不是我编译环境什么的问题
那位大哥指点一下啊
谢谢了
@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);
}
用这个监听
但还有个问题想请教一下
下面代码关于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);
}
};
}
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
if(i<6)
int i=0;
i=i+1;