Android Handler 消息机制的日常开发运用与代码测试

很多时候我们需要对每个组件或者所有的UI线程要去负责View的创建并且维护它,例如更新冒个TextView的显示,都必须在主

线程中去做,我们不能直接在UI线程中去创建子线程,要利用消息机制:handler

本篇博客将带大家走进我们熟悉的Handler,顺带写了一个例子来验证Handler的消息机制,Handler通过对子线程的处理,实

现对UI的更新等操作

private TextView time;
            private Handler handler = new Handler(){
            	public void handleMessage(Message msg) {
            		if(msg.what==Reflsh){
            			time.setText(String.valueOf(msg.obj));
            		}
            		super.handleMessage(msg);
            	};
            };
            @Override
            public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            text = getResources().getStringArray(R.array.array);
            for(int i=0;i<text.length;i++){
            	Map<String,Object> map = new HashMap<String, Object>();
            	map.put("img", icon[i]);
            	map.put("name", text[i]);
            	list.add(map);
            }
            adapter = new SimpleAdapter(getActivity(), list, R.layout.log, new String[]{"img","name"}, new int []{R.id.g_icon,R.id.g_text});
            }
			@Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
            		Bundle savedInstanceState) {
            	 View view = inflater.inflate(R.layout.fragment_shouye, container, false) ;
            	 gridview = (GridView)view.findViewById(R.id.gridView);
            	 time = (TextView)view.findViewById(R.id.time);//时间
            	 ImageView icon = (ImageView)view.findViewById(R.id.icon);//头像
            	 TextView name = (TextView)view.findViewById(R.id.name);//昵称
//
   				File file = new File(Environment.getExternalStorageDirectory()+"/"+"weiinfo") ;
   				BufferedReader reader = null ;
   				String line = null ;
   				try {
   					 reader = new BufferedReader(new FileReader(file)) ;
   					 line = reader.readLine() ;
   				} catch (Exception e) {
   					e.printStackTrace();
   				}
   	          	 data = line.split("\\*") ;

            	 Picasso.with(getActivity().getApplicationContext()).load(data[5]).into(icon);
            	 name.setText(data[0]);
            	 new Thread(new Runnable() {
					@Override
					public void run() {
						try {
							while(true){
							Thread.sleep(1000);
							Message msg = new Message();
							msg.what = Reflsh;
							msg.obj = new Date(System.currentTimeMillis()).toLocaleString();
							Log.d("XXXXXXXXXXXXXX", msg.obj.toString());
							handler.sendMessage(msg);
							}
						} catch (Exception e) {
							Log.d("异常", ""+e);
						}
					}
				}).start();

上面测试Handler的代码是来自MaoZhuaWeiBo的首页界面的动态北京时间演示,我写了一个Handler来处理我new 出来的子线程,在子线程里我每休眠一秒执行获取一次模拟器当前系统时间,并且将消息发送至Handler处理,Handler将消息更新view同步更新,并且不会阻塞主UI,这就是Handler消息机制的好处!

消息机制打印结果:

一直到关闭这个应用程序为止,打印结果才会停止,这就是Handler的消息机制了~

时间: 2024-10-11 13:26:27

Android Handler 消息机制的日常开发运用与代码测试的相关文章

Android Handler消息机制深入浅出

作为Android开发人员,Handler这个类应该是再熟悉不过了,因为几乎任何App的开发,都会使用到Handler这个类,有些同学可能就要说了,我完全可以使用AsyncTask代替它,这个确实是可以的,但是其实AsyncTask也是通过Handler实现的,具体的大家可以去看看源码就行了,Handler的主要功能就是实现子线程和主线程的通信,例如在子线程中执行一些耗时操作,操作完成之后通知主线程跟新UI(因为Android是不允许在子线程中跟新UI的). 下面就使用一个简单的例子开始这篇文章

Android Handler消息机制

在上一篇文章<Android AsyncTask异步任务>中我们介绍了如何使用AsyncTask异步处理网络通信和UI更新.在本文中将使用Handler消息机制来异步处理网络通信和UI更新. Google参考了Windows的消息机制,在Android系统中实现了一套类似的消息机制.学习Android的消息机制,有几个概念(类)必须了解: 1.Message 消息,理解为线程间通讯的数据单元.例如后台线程在处理数据完毕后需要更新UI,则可发送一条包含更新信息的Message给UI线程. 2.M

Android Handler消息机制源码解析

好记性不如烂笔头,今天来分析一下Handler的源码实现 Handler机制是Android系统的基础,是多线程之间切换的基础.下面我们分析一下Handler的源码实现. Handler消息机制有4个类合作完成,分别是Handler,MessageQueue,Looper,Message Handler : 获取消息,发送消息,以及处理消息的类 MessageQueue:消息队列,先进先出 Looper : 消息的循环和分发 Message : 消息实体类,分发消息和处理消息的就是这个类 主要工

深入解析Android中Handler消息机制

Android提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange).Handler消息机制可以说是Android系统中最重要部分之一,所以,本篇博客我们就来深入解析Android中Handler消息机制. Handler的简单使用 为什么系统不允许子线程更新UI 因为的UI控件不是线程安全的. 如果在多线程中并发访问可能会导致UI控件处于不可预期的状态,那为什么不对UI控件的访

Android 开发艺术探索——第十章 Android的消息机制

Android 开发艺术探索--第十章 Android的消息机制读书笔记 Handler并不是专门用于更新UI的,只是常被用来更新UI 概述 Android的消息机制主要值得就是Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑. MessageQueue即为消息队列,顾名思义,它的内部存储了一组消息,以队列的的形式对外提供插入和删除的工作.虽然叫队列,但内部存储结构并不是真正的队列,而是采用单链表的数据结构来存储消息列表. Looper意思为循

Android的消息机制以及Message/MessageQueue/Handler/Looper

概览 * Message:消息.消息里面可包含简单数据.Object和Bundle,还可以包含一个Runnable(实际上可看做回调). * MessageQueue:消息队列,供Looper线程消费消息. * Looper:用于循环处理Message,一个Thread结合一个Looper来实现消息循环处理.Android App的主线程包含了Looper. * Handler:负责向当前Looper线程发送Message,并实现如何处理消息的回调,回调可放到Callback接口的实现中,也可以

Android的消息机制Handler详解

Android的消息机制详解 Android的消息机制主要指 Handler 的运行机制,Handler的运行需要底层的MessageQueue 和 Looper 的支撑. MessageQueue:消息队列,它的内部存储了一组消息,以队列的形式对外提供插入和删除的工作,其内部存储结构采用单链表的数据结构来存储消息列表. Looper:可理解为消息循环. 由于MessageQueue只是一个消息存储单元,不能去处理消息,而Looper会以无限循环的形式去查找是否有新的消息,如果有的话就处理,否则

【Android自助餐】Handler消息机制完全解析(二)MessageQueue的队列管理

Android自助餐Handler消息机制完全解析(二)MessageQueue的队列管理 Android自助餐Handler消息机制完全解析二MessageQueue的队列管理 添加到消息队列enqueueMessage 从队列取出消息next 第一段 第三段 第二段 从队列移除消息removeMessages 第一个while 第二个while 关于这个队列先说明一点,该队列的实现既非Collection的子类,亦非Map的子类,而是Message本身.因为Message本身就是链表节点(见

【Android自助餐】Handler消息机制完全解析(一)Message中obtain()与recycle()的来龙去脉

[Android自助餐]Handler消息机制完全解析(一)Message中obtain()与recycle()的来龙去脉 Android自助餐Handler消息机制完全解析一Message中obtain与recycle的来龙去脉 提供obtain 回收recycle 提供obtain() 在obtain的所有重载方法中,第一行都是Message m = obtain();,即调用空参的方法. 先来看一下这个空参方法 public static Message obtain() { synchr