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,大家帮我看看吧!谢谢。。
解决方案 »
- android手机只能在连上豌豆荚的时候才能链接上eclipse 为什么?
- 创建模拟器失败,用命令行也是
- 源代码中ctrl+左键没有反应怎回事儿?
- gridview垂直滚动条问题
- 帮我看看哪错了?logcat中提示这个出错了
- 求解关于GLU.gluOrtho2D的问题,请大家指教啊啊啊 为什么没人回答呢,OpenGL的问题啊
- 关于NativeActivity的一点疑问,请高人指点!
- 请问大家研究过opencore的oscl的跨平台吗?
- 如何解析ndk-stack出现的signal 11 (SIGSEGV)这种dump?
- 代码创建控件--提问贴:分数不多,会有人回复吗?
- 新手请教:代码哪里出错了?
- 初学者小问题
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;