您的位置:首页 > 移动开发 > Android开发

Android 中 Handler 消息传递机制

2014-07-11 16:15 393 查看
在 Android 平台中,新启动的线程是无法访问 Activity 里的 Widget 的,当然也不能将运行的状态送出来,这就需要有 Handler 机制进行消息的传递了,

Handler 的主要功能是完成 Activity 的 Widget 与应用程序中线程之间的交互。

开发事实有 Handler 类的程序步骤如下:

1,在 Activity 或 Activity 的 Widget 中创建 Handler 类的对象,并重写 handleMessage 方法。

2,在新启动的线程中调用 sendEmptyMessage 或者 sendMessage 方法向 Handler 发送消息。

3,Handler 类的对象用 handleMessage 方法接收消息,然后根据消息的不同执行不同的操作。

下面举一个换图程序的例子。

主要逻辑代码

[java] view
plaincopy

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();

}

}

换图线程类

[java] view
plaincopy

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();

}

}

}

}

当然这里需要在 res/drawable中添加图片资源,并且编写相就的 main.xml 文件

[html] view
plaincopy

<?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>

运行程序观察运行效果,会每隔两秒钟更换一张图片。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: