新手handlemessage() 没调用

kobe32 2012-05-15 05:01:31
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,大家帮我看看吧!谢谢。。
...全文
1060 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Marco_Lee 2012-05-18
  • 打赏
  • 举报
回复
i每次都被初始化了~~~
haoanbang 2012-05-18
  • 打赏
  • 举报
回复
public int i=0;
if(i<6)
int i=0;
i=i+1;
haoanbang 2012-05-18
  • 打赏
  • 举报
回复

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
haoanbang 2012-05-18
  • 打赏
  • 举报
回复
声明周期问题
haoanbang 2012-05-17
  • 打赏
  • 举报
回复
还有个问题 ,今天才看到,Handler的是handleMessage而不是你的handlemessage你这个充其量是你自己的方法,而不是override的方法
haoanbang 2012-05-17
  • 打赏
  • 举报
回复

@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);
}




用这个监听
kobe32 2012-05-17
  • 打赏
  • 举报
回复
谢谢楼上。。已解决
但还有个问题想请教一下
下面代码关于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);

}

};
}
haoanbang 2012-05-16
  • 打赏
  • 举报
回复
这个打印出来的不再console中 在logcat中看
haoanbang 2012-05-16
  • 打赏
  • 举报
回复
不过你的代码我用着 好使 没什么问题。
haoanbang 2012-05-16
  • 打赏
  • 举报
回复
是否需要设置优先级?
ht.setPriority(Thread.MIN_PRIORITY);
kobe32 2012-05-16
  • 打赏
  • 举报
回复
发现其他程序 只要用到message也是这样的,根本就没调用,代码又没报错,彻底无语了
是不是我编译环境什么的问题
那位大哥指点一下啊
谢谢了
kobe32 2012-05-16
  • 打赏
  • 举报
回复
log里面没有,只有前面主线程的那两句
我也感觉没问题,可就是出不来。。
哎。。
不知道怎么回事啊
fhhdg 2012-05-16
  • 打赏
  • 举报
回复
用log类打印
kobe32 2012-05-15
  • 打赏
  • 举报
回复
加按钮后还是不可以。
怎么回事啊!
manoel 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

HandlerThread ht =new HandlerThread("ht");
ht.start();
t t1 =new t(ht.getLooper());
Message mess=t1.obtainMessage();
//mess.sendToTarget();
t1.sendMessage(mess);

试试把这段代码放到一个按钮中点击触发……
[/Quote]
可行。
himi_ 2012-05-15
  • 打赏
  • 举报
回复
HandlerThread ht =new HandlerThread("ht");
ht.start();
t t1 =new t(ht.getLooper());
Message mess=t1.obtainMessage();
//mess.sendToTarget();
t1.sendMessage(mess);

试试把这段代码放到一个按钮中点击触发,不要直接写在onCreate中。

80,492

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧