在前面 开启一个线程Thread并用进度条显示进度 这篇文章里,我们用线程实现了这么一个简单的功能,就是点击按钮,加载进度条。但是有没有发现,点击一次之后,再次点击就会没效。我们可是需要每次点击都要显示下一张图片的。永盈会娱乐城
这里就需要引入 Android 的消息机制了,简单来说,就是 Handler、Looper 还有 Message Queue的使用。这里我们用一个简单的例子来说明 Handler 的使用,就是每次点击按钮,给消息队列发送一个数字 5。还是在 PaintingActivity 里做。
PaintingActivity :
01 |
private Button btn_next; |
02 |
private Handler pic_hdl; |
05 |
protected void onCreate(Bundle savedInstanceState) { |
07 |
super .onCreate(savedInstanceState); |
08 |
setContentView(R.layout.painting); |
10 |
btn_next = (Button)findViewById(R.id.btn_loadnext); |
11 |
btn_next.setOnClickListener( new ButtonListener()); |
13 |
pic_hdl = new PicHandler(); |
16 |
class ButtonListener implements OnClickListener{ |
19 |
public void onClick(View v) { |
21 |
if ( v.getId() == R.id.btn_loadnext){ |
22 |
Message msg = pic_hdl.obtainMessage(); |
24 |
pic_hdl.sendMessage(msg); |
30 |
class PicHandler extends { |
33 |
public void handleMessage(Message msg) { |
36 |
System.out.println( "what: " + what); |
就这么简单就完成了。演示效果:
简要介绍一下过程:
- private Handler pic_hdl; 定义一个 Handler, 而 pic_hdl = new PicHandler(); 则是从我们定义的 class PicHandler 新建一个 Handler;
- 然后看按钮的 onClick 事件,obtainMessage 为获取一个 msg 对象,然后给 msg.what 赋值,sendMessage 将 msg 对象发到消息队列中;
- 回到 PicHandler,我们在 handleMessage 可以很简单地重新获得消息队列里 what 的值。然后在 Log 里打印出来。
接下来我们会再继续深入 Handler 这个东西。