android中handler处理message小例子
大家好!我今天刚申请的博客,也是第一次写博客,希望能和大家交流知识和经验,互相促进学习。可能有不对的地方或者不详细的地方,希望朋友们多多见谅!今天来一起学习一下handler处理Message的简单用法。
首先,我们了解一下什么是handler:handler主要就是接受子线程发送的message,并用此message配合主线程更新UI 。更新UI只能在主线程中更新,子线程中操作是危险的. 这个时候,Handler就出现了来解决这个复杂的问题,由于Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据,这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据) , 把这些消息放入主线程队列中,配合主线程进行更新UI。
其次就是handler的主要方法:
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
最后我们看一下我写的一个例子:
1.运行界面如下:
2.具体的功能如下:
当你点击自动增加按钮时,textview的数值会每隔一秒自动增加2,当点击暂停按钮时就会停止,当达到规定的最大值(这里我设置的是14)时就停止了,自动增加按钮和暂停按钮失去焦点,不可点击。如下图:
当点击自动减少按钮时,TextView的数值14会自动减少(每秒中减少2),当点击暂停按钮时就会停止,当减少到0的时候,自动减少和暂停按钮就会失去焦点,不可点击。如下图:
3.Acitivity全部代码如下:
package cn.yj3g.handler; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ProgressBar; 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 static final int INCREMENT_PRO = 1; private static final int DECREMENT_PRO = 2; private static final int PAUSE_PRO = 3; private Handler hd = new Handler(){ @Override public void handleMessage(Message msg) {//处理子线程发送过来的消息 // TODO Auto-generated method stub int what = msg.what; int i = Integer.parseInt(textView.getText().toString()); switch(what){ case INCREMENT_PRO: i+=2; hd.removeMessages(DECREMENT_PRO); decreaseButton.setEnabled(true); pauseButton.setEnabled(true); if(i>14){ Toast.makeText(HandlerActivity2.this, "已到最大值", 0).show(); textView.setText("14"); increaseButton.setEnabled(false); pauseButton.setEnabled(false); return; } textView.setText(i+""); hd.sendEmptyMessageDelayed(INCREMENT_PRO, 1000);//发送延迟消息,过一秒 自动增长一次 break; //如果没有这句话,数值将不会自动增加 case DECREMENT_PRO: hd.removeMessages(INCREMENT_PRO); increaseButton.setEnabled(true); pauseButton.setEnabled(true); i=i-2; if(i<0){ Toast.makeText(HandlerActivity2.this, "已到最小值", 0).show(); //hd.removeMessages(DECREMENT_PRO); textView.setText("0"); increaseButton.setEnabled(true); decreaseButton.setEnabled(false); pauseButton.setEnabled(false); return; } textView.setText(i+""); hd.sendEmptyMessageDelayed(DECREMENT_PRO, 1000); break; case PAUSE_PRO: break; default: break; } super.handleMessage(msg); } }; @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 m = Message.obtain(hd,INCREMENT_PRO); hd.sendMessage(m); } else if(v==decreaseButton) { Message m = Message.obtain(hd,DECREMENT_PRO); hd.sendMessage(m);//发送消息 } else if(v==pauseButton) { hd.removeMessages(INCREMENT_PRO);//去除增长消息 hd.removeMessages(DECREMENT_PRO);//去除减少消息 } } }
4.xml文件代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/test_text_id" android:layout_marginBottom="10dip" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="0" /> <Button android:id="@+id/test_button1_id" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dip" android:text="自动增加"/> <Button android:id="@+id/test_button2_id" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="自动减少" android:layout_marginBottom="10dip"/> <Button android:id="@+id/test_button3_id" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="暂停" /> </LinearLayout>