android学习笔记(七):Handler消息传递机制
2015-12-04 16:37
447 查看
1、先举个例子:
图片定时轮播
MainActivity.java:
方法内的匿名内部类调用局部变量时,该局部变量必须是常量。此时内部类会把该常量复制一份放到内部类中,这样,方法结束时,虽然局部变量消失了,但是内部类中的常量还是可以使用的
原因参考:/article/4719054.html
图片资源的名字不能是数字,否则出错
只有UI线程能处理与UI相关的事件,其他线程不能处理,这样就用到了handler消息处理机制
![](http://img.blog.csdn.net/20151204164501106)
2、Looper、Handler、MessageQueue的作用:
- Looper:每个线程只有一个Looper,它负责管理MessageQueue,会不断地从MessageQueue中取出消息,并将消息分给对应的Handler处理
- MessageQueue:有Looper负责管理,它采用先进先出的方式来管理Message
- Handler:它能把消息发送给MessageQueue,并负责处理Looper分给它的消息
3、 在线程中使用Handler的步骤如下:
- 调用Looper的prepare()方法为当前线程创建Looper对象,创建对象时,它的构造器会创建与之配套的MessageQueue
- 有了Looper后,创建Handler的实例,重写handleMessage()方法,该方法负责处理来自于其他线程的消息
- 调用Looper的loop()方法,启动Looper
图片定时轮播
MainActivity.java:
package com.example.weixin; import java.util.Timer; import java.util.TimerTask; import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBarActivity; 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 ActionBarActivity { int[] drawable = new int[]{ R.drawable.a, R.drawable.b, R.drawable.c }; int i = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ImageView imageView = (ImageView)findViewById(R.id.view); final Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub if(msg.what == 0x110) { imageView.setImageResource(drawable[i++%drawable.length]); } } }; new Timer().schedule(new TimerTask() { @Override public void run() { // TODO Auto-generated method stub handler.sendEmptyMessage(0x110); } },0,1200); }
方法内的匿名内部类调用局部变量时,该局部变量必须是常量。此时内部类会把该常量复制一份放到内部类中,这样,方法结束时,虽然局部变量消失了,但是内部类中的常量还是可以使用的
原因参考:/article/4719054.html
图片资源的名字不能是数字,否则出错
只有UI线程能处理与UI相关的事件,其他线程不能处理,这样就用到了handler消息处理机制
2、Looper、Handler、MessageQueue的作用:
- Looper:每个线程只有一个Looper,它负责管理MessageQueue,会不断地从MessageQueue中取出消息,并将消息分给对应的Handler处理
- MessageQueue:有Looper负责管理,它采用先进先出的方式来管理Message
- Handler:它能把消息发送给MessageQueue,并负责处理Looper分给它的消息
3、 在线程中使用Handler的步骤如下:
- 调用Looper的prepare()方法为当前线程创建Looper对象,创建对象时,它的构造器会创建与之配套的MessageQueue
- 有了Looper后,创建Handler的实例,重写handleMessage()方法,该方法负责处理来自于其他线程的消息
- 调用Looper的loop()方法,启动Looper
相关文章推荐
- android开发之软键盘控制
- Android之View基础总结(View的事件体系一)
- Android开发周报:弹幕源码开放送
- android launcher3拖放功能深入剖析
- 【转载】Android样式的开发:View Animation篇
- Android 记住密码和自动登录界面的实现(SharedPreferences 的用法)
- 给 Android 开发者的 RxJava 详解
- Android开发之Tools使用
- Android动画解析2-帧动画实现
- Android Studio的使用02-Can't resolve the symblo异常
- Android调用WebService(图文教程)
- Android URI简介
- android(12)(简单学生管理系统,包括文件写入SD卡,pull解析xml文件等)
- Android 对话框(Dialog)大全
- Android调用系统自带的文件管理器进行文件选择
- Android 控件GridView的使用
- Camera和Photo相关
- LinearGradient在android开发中实现字体渐变效果实例
- Android Studio 操作记录
- Android Studio 常见问题