/*功能描述 1 布局: 2 点击“自动增加”,每隔1S上面的文本数值增加2,但最大显示9并作出提示 3 点击“自动减少”,每隔1S上面的文本数值减少2,但最小显示0并作出提示 4 点击“暂停”,上面的文本数值不再变化 */先贴源码: import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class HandlerActivity2 extends Activity implements View.OnClickListener { private TextView textView; private Button increaseButton; private Button decreaseButton; private Button pauseButton; private Handler mhandler = new Handler() { @Override public void handleMessage(Message msg) { String str = (String) textView.getText(); int i = Integer.parseInt(str); switch (msg.what) { case 1: { i += 2; increaseButton.setEnabled(true); decreaseButton.setEnabled(true); mhandler.removeMessages(2); textView.setText(i + ""); mhandler.sendEmptyMessageDelayed(1, 1000); if (i >= 9) { textView.setText(9 + ""); increaseButton.setEnabled(false); mhandler.removeMessages(1); Toast.makeText(getApplicationContext(), "已经到最大了", 0).show(); } } break; case 2: { i -= 2; decreaseButton.setEnabled(true); increaseButton.setEnabled(true); mhandler.removeMessages(1); textView.setText(i + ""); mhandler.sendEmptyMessageDelayed(2, 1000); if (i <= 0) { textView.setText(0 + ""); decreaseButton.setEnabled(false); Toast.makeText(getApplicationContext(), "已经到最小了", 0).show(); mhandler.removeMessages(2); } } break; default: break; } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test_handler); textView = (TextView) findViewById(R.id.test_text_id); increaseButton = (Button) findViewById(R.id.test_button1_id); decreaseButton = (Button) findViewById(R.id.test_button2_id); pauseButton = (Button) findViewById(R.id.test_button3_id); increaseButton.setOnClickListener(this); decreaseButton.setOnClickListener(this); pauseButton.setOnClickListener(this); } public void onClick(View v) { if (v == increaseButton) { Message msg = new Message(); msg.what = 1; mhandler.sendMessage(msg); } else if (v == decreaseButton) { Message msg = new Message(); msg.what = 2; mhandler.sendMessage(msg); } else if (v == pauseButton) { mhandler.removeMessages(1); mhandler.removeMessages(2); } } }分析:
首先要定义一个Handler mhandler,并实例化:
private Handler mhandler = new Handler() { @Override public void handleMessage(Message msg) { String str = (String) textView.getText(); int i = Integer.parseInt(str); switch (msg.what) { case 1: { i += 2; increaseButton.setEnabled(true); decreaseButton.setEnabled(true); mhandler.removeMessages(2); textView.setText(i + ""); mhandler.sendEmptyMessageDelayed(1, 1000); if (i >= 9) { textView.setText(9 + ""); increaseButton.setEnabled(false); mhandler.removeMessages(1); Toast.makeText(getApplicationContext(), "已经到最大了", 0).show(); } } break; case 2: { i -= 2; decreaseButton.setEnabled(true); increaseButton.setEnabled(true); mhandler.removeMessages(1); textView.setText(i + ""); mhandler.sendEmptyMessageDelayed(2, 1000); if (i <= 0) { textView.setText(0 + ""); decreaseButton.setEnabled(false); Toast.makeText(getApplicationContext(), "已经到最小了", 0).show(); mhandler.removeMessages(2); } } break; default: break; } } };在这个里面,要重写public void handleMessage(Message msg)方法,从方法的名字可以看出这个方法是用来处理Message的,它接受从handler发过来的Message,然后做出响应的处理。
Handler有三个作用:
一、发送(Messageuixiang)消息
handler.SendMessage(Message msg)二、接受消息(并处理消息)
handlerMessage(Message msg)
三、清除消息队列
handler.remove(what)
Message类:
在Message对象中,有三个参数,其中what是用来标记线程的,标记之后,把这个线程的msg发送到主线程中去,用handleMessage(Message msg)接受并做出判断,然后做出相应的处理,最后反应到Activity中去,有需要的话,在UI上面做出相应的变化。
下面这张图是转别人的,画的很具体。
参考博客:http://qaohao.iteye.com/blog/509145
//