Android---27---Handler消息传递机制

Android制定了一条规则:只允许UI线程修改Activity里的UI组件。主线程通常又被叫做UI线程。

那么这样的话新启动的线程就不可能动态改变界面组件的属性值,但显然这是不可能的。所以便有了Handler消息处理机制。

 

Handler类:

主要有两个作用:

1.在新启动的线程中发送消息

2.在主线程中获取、处理消息。

 

主要方法:

 void handleMessage (Message msg):处理消息的方法

 final boolean hasMessage (int what):检查消息队列中是否含有what属性的值

  final boolean hasMessage(int what,Object object):检查消息队列中是否包含有what属性和object属性的值

 sendEmptyMessage (int what):发送空消息

  final boolean sendMessage (Message msg):立即发送消息

 final boolean sendMessageDelayed (Message msg,long delayMillis):指定多少毫秒之后发送消息                          

 

 

 自动播放动画:


MainActivity.java:


import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;

public class MainActivity extends Activity {
	int images[] = new int[] { R.drawable.yy01, R.drawable.yy02,
			R.drawable.yy03, R.drawable.yy04, R.drawable.yy05, R.drawable.yy06,
			R.drawable.yy07, R.drawable.yy08, R.drawable.yy09, R.drawable.yy10,
			R.drawable.yy11, R.drawable.yy12, R.drawable.yy13, };
	int currentImage = 0;
	private ImageView imageView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		imageView = (ImageView) findViewById(R.id.imageshow);
		final Handler mHandler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				// TODO Auto-generated method stub
				super.handleMessage(msg);
				// 如果该消息是本程序发出的
				if (msg.what == 0x1233) {
					// 修改要显示的图片
					imageView.setImageResource(images[currentImage++
							% images.length]);
				}
			}
		};
		// 定义一个计时器,让该计时器周期性的执行指定任务
		// 通过Timer周期性的执行指定任务,Timer对象可调度TimerTask对象,TimerTask对象的本质就是启动一条新线程
		new Timer().schedule(new TimerTask() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				// 发送空消息
				mHandler.sendEmptyMessage(0x1233);
			}
		}, 0, 2000);
	}
}


布局文件中就只有一个ImageView。。



 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。