布局:
<?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/txtTest" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="HandlerTest" /> <Button android:id="@+id/btnTest" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="测试" /> </LinearLayout>
import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; /** * Android Handler 异步消息处理机制 * */ public class HandlerTestActivity extends Activity { private static final String TAG="HandlerTestActivity"; private Button btnTest; private TextView txtTest; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); txtTest = (TextView) this.findViewById(R.id.txtTest); btnTest= (Button) this.findViewById(R.id.btnTest); //设置 OnClick 监听器 btnTest.setOnClickListener(new BtnTestOnClickListener()); } //点击测试按钮后调用 BtnTestOnClickListener 的 OnClick 方法 class BtnTestOnClickListener implements OnClickListener { public void onClick(View v) { /* //把线程对象放到handler的队列中,线程会马上启动执行 handler.post(thread); */ //启动线程 thread.start(); try { // 为了看到异步效果,我让当前线程停止了2秒钟 Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } Log.i(TAG, "OnClick........"); } } // 定义一个Handler,用来异步处理数据 Handler handler = new Handler() { //相当于jquery $.ajax方法中的 Success:function(){} public void handleMessage(android.os.Message msg) { // 对线程中 handler 返回的结果进行处理 Log.i(TAG, "结果返回,正在处理"); if(msg.what ==1) { txtTest.setText("异步处理结果 === Handler "); } }; }; Thread thread = new Thread() { public void run() { Log.i(TAG, "start Thread"); //发送一个空消息到消息队列里面 //此方法相当于后台往前台Ajax响应结果,在Java当中,相当于一个Action方法里面out.println(1); handler.sendEmptyMessage(1); }; }; }
分析:
click ——》new Thread ——》sendEmptyMessage(1) ——》handleMessage;
运行结果: