当前位置: 代码迷 >> Android >> Android-27-Handler消息传递机制
  详细解决方案

Android-27-Handler消息传递机制

热度:266   发布时间:2016-04-28 01:20:12.0
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。。



 

  相关解决方案