例子:
[color=red]PS:Handler有两个消息队列,一个是post线程队列,另一个是message消息队列,两个队列的方法是异步的。handler匿名内部类方法是在handler.sendMessage(msg)后执行。
Thread.currentThread().getId()和Thread.currentThread().getName()是得到当前线程Id和Name的方法
Handler.post方法和Runnable是处于同一个线程(重要!!)
[/color]
public class HandlerActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button b1 = (Button)findViewById(R.id.button1);
Button b2 = (Button)findViewById(R.id.button2);
b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//立即把线程加入消息队列中
handler.post(r);
}
});
b2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//停止线程
handler.removeCallbacks(r);
}
});
}
Handler handler = new Handler();
/**
*该方法的内部类将在handler.sendMessage(msg)后执行
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
System.out.println("msg:"+msg.arg1);
}
};
*/
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("sysout Thread");
//得到一个消息对象,Message类是有Android系统
Message msg = handler.obtainMessage();
//将msg对象arg1参数设置为122,用arg1和arg2传递消息
//优点是系统资源消耗较小
msg.arg1 = 122;
//将消息加入到另外一个消息队列中去
handler.sendMessage(msg);
//3000毫秒后加入线程到消息队列中
handler.postDelayed(r, 3000);
}
};
}
[color=red]PS:Handler有两个消息队列,一个是post线程队列,另一个是message消息队列,两个队列的方法是异步的。handler匿名内部类方法是在handler.sendMessage(msg)后执行。
Thread.currentThread().getId()和Thread.currentThread().getName()是得到当前线程Id和Name的方法
Handler.post方法和Runnable是处于同一个线程(重要!!)
[/color]