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>
运行程序观察运行效果,会每隔两秒钟更换一张图片。
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>
运行程序观察运行效果,会每隔两秒钟更换一张图片。
相关文章推荐
- Android中的消息机制:Handler消息传递机制
- Android中的消息机制:Handler消息传递机制
- Android事件处理之四 Handler消息传递机制
- Android的Handler消息传递机制
- android の Handler消息传递机制
- Android22_Handler消息传递机制——源码赏析
- Android Handler消息传递机制
- Android21_Handler、Looper消息传递机制
- Handler Looper源码解析(Android消息传递机制)
- Android 中 Handler 消息传递机制
- Android 中 Handler 消息传递机制
- Android Handler类消息传递机制(三)不同类中使用Handler
- Android Handler类消息传递机制(二)同一类(或内部类)中使用Handler
- Android中Handler消息传递机制
- android学习之——Handler消息传递机制
- Android Handler消息传递机制
- 解析Android的 消息传递机制Handler
- 解析Android的 消息传递机制Handler
- Android Handler消息传递机制
- 第四课:Android Handler消息传递机制