在 Android 平台中,新启动的线程是无法访问 Activity 里的 Widget 的,当然也不能将运行的状态送出来,这就需要有 Handler 机制进行消息的传递了,
Handler 的主要功能是完成 Activity 的 Widget 与应用程序中线程之间的交互。
开发事实有 Handler 类的程序步骤如下:
1,在 Activity 或 Activity 的 Widget 中创建 Handler 类的对象,并重写 handleMessage 方法。
2,在新启动的线程中调用 sendEmptyMessage 或者 sendMessage 方法向 Handler 发送消息。
3,Handler 类的对象用 handleMessage 方法接收消息,然后根据消息的不同执行不同的操作。
下面举一个换图程序的例子。
主要逻辑代码
- package wyf.ytl;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.widget.ImageView;
- public class SampleHandler extends Activity {
- ImageView myImageView;
- Handler myHandler = new Handler(){
- @Override
- public void handleMessage(Message msg) {
- switch(msg.what){
- case 0:
- myImageView.setImageResource(R.drawable.bbta);break;
- case 1:
- myImageView.setImageResource(R.drawable.bbtb);break;
- case 2:
- myImageView.setImageResource(R.drawable.bbtc);break;
- case 3:
- myImageView.setImageResource(R.drawable.bbtd);break;
- }
- super.handleMessage(msg);
- }
- };
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- myImageView = (ImageView) findViewById(R.id.myImageView);
- MyThread myThread = new MyThread(this);
- myThread.start();
- }
- }
换图线程类
- package wyf.ytl;
- public class MyThread extends Thread{
- SampleHandler activity;
- int what = 1;
- public MyThread(SampleHandler activity){
- this.activity = activity;
- }
- @Override
- public void run() {
- while(true){
- activity.myHandler.sendEmptyMessage((what++)%4);
- try{
- Thread.sleep(2000);
- }
- catch(Exception e){
- e.printStackTrace();
- }
- }
- }
- }
- <?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"
- android:gravity="center" >
- <ImageView
- android:id="@+id/myImageView"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:src="@drawable/bbta"
- android:gravity="center" />
- </LinearLayout>
运行程序观察运行效果,会每隔两秒钟更换一张图片。