Android Bundle、Handler和Message类介绍

  • Bundle是一个载体,可以存放基本数据类型、对象等内容,相当于一辆汽车,可以装载很多东西,然后运到需要的地方,例如:
Bundle mBundle=new Bundle();
mBundle.putString("name","zhaolinit");
mBundle.putInt("number",123456);
mBundle.putBoolean("flag",false);
//然后,放到Intent对象中
Intent mIntent=new Intent();
mIntent.putExtras(mBundle);
  • Message:包含描述和任意数据对象的消息,用于发送给Handler     

  它的成员变量如下:

public final class Message implements Parcelable {
    public int what;
    public int arg1;
    public int arg2;
    public Object obj;
    ...
    }

  其中what用于标识这条消息,也可以让接收者知道消息是关于什么的。arg1和arg2用于发送一些integer类型的值。obj用于传输任意类型的值。

  • Handler:消息处理者,通过重写Handler的handleMessage()方法,在方法中处理接收到的不同消息,例如:
Handler mHandler=new Handler(){

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case TestHandler.TEST:            progressValue += msg.arg1; Log.d("progressValue-------------->", progressValue+"");            break;        }       } }

  在其它地方,通过sendMessage()方法,发送消息,以供handleMessage()方法接受

class myThread implements Runnable {
          public void run() {
               while (!Thread.currentThread().isInterrupted()) {    

                    Message message = new Message();
                    message.what = TestHandler.TEST;   

                    TestHandler.this.myHandler.sendMessage(message);
                    try {
                         Thread.sleep(100);
                    } catch (InterruptedException e) {
                         Thread.currentThread().interrupt();
                    }
               }
          }
     }

通过子线程处理一些耗时的操作,然后把处理后的结果通过sendMessage()方法发送到UI主线程。让主线程的Handler进行UI组件的结果更新。

时间: 2024-08-06 16:03:05

Android Bundle、Handler和Message类介绍的相关文章

Android的Handler Looper Message机制应用实例与详解(一)

Android的UI操作不是线程安全的(出于提高性能考虑,避免实现多线程同步等机制所引入的延时),若多个线程同时对UI元素进行操作,可能导致线程安全问题.因此,Android中做了严格的规定:只有UI主线程才能对UI进行设置与操作. 在实际编程中,为了避免UI界面长时间得不到响应而导致的ANR(Application Not Responding)异常,通常将网络访问.复杂运算等一些耗时的操作被放在子线程中执行.这就需要子线程在运行完毕后将结果返回到主线程并通过UI进行显示.在Android中,

Android的Handler Looper Message机制应用实例与详解(二)

上一篇博文给出了Android中基于Handler Looper机制实现线程间通信的两个典型实例.本文将对该机制的基本原理进行较深入的研究.个人认为,学好Android编程最好的老师就是Android的源代码,下面将基于Android-19的源码进行分析,重点阐述分析思路. 要分析Handler Looper机制,自然想到去看Handler类和Looper类的源码(分别位于Handler.java和Looper.java两个文件中).简单阅读两个类的描述后,在Looper类的描述中能找到以下一段

浅析android中handler与Message(一)

hander与message 1.hander 作用:接受子线程的数据,(Message或Runable对象)更新已绑定的对象. 为什么会出现: 在android或其他的应用中存在一些耗时操作,这些操作如果全部出现在主线程中,当他们进行的时候,你是没办法去做其他的事情的.这时人们就想,可不可以在申请一些"资源",专门用来处理这项耗时的操作,而不影响当前的进程. 于是多线程出来了,相应的,就把一些事情放在了另外的一些线程中执行,这时,我们暂且把耗时的认为是子线程(我们自己开启的),把系统

【Android 开发】: Android 消息处理机制之一: Handler 与 Message

最近几讲内容,我们学习了Android中关于多线程的一些知识,上一讲我们讲解了异步任务 AsyncTask 的操作,Android中还提供了其他的线程操作,如Handler Message MessageQueue Looper 等模块,这些就是Android中的消息处理机制.这部分内容是Android学习过程中的重点和难点.    现在我们就来学习一下Android的消息处理,以及剖析一下相关类如Handler和Message类的源代码,同时使用他们来更新UI主线程的操作.因为Android的

转载《Android Handler、Message》

之前也是由于周末通宵看TI3比赛,一直没找到时间写博客,导致已经有好久没更新了.惭愧!后面还会恢复进度,尽量保证每周都写吧.这里也是先恭喜一下来自瑞典的Alliance战队夺得了TI3的冠军,希望明年中国战队能够虎起! 开始进入正题,我们都知道,Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃.相信大家在日常的工作当中都会经常遇到这个问题,解决的方案应该也是早已烂熟于心,即创建一个Message对象,然后借助Handler发送出去,之后在Handler的ha

Handler ,Message ,Thread 的用法

在 Android 中 主线程 与子线程之前的通讯 主要依靠Handler来实现, Handler 简单的用法如下 // 在外部声明一个 Handler,实心内部的handleMessage()方法来管理Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case 0: System.out.

转载:android笔记--android中的多线程--Handler, Looper, MessageQueue, Message类

什么时候使用多线程: 1. 耗时操作使用多线程, 耗时操作放在UI线程中会导致用户的操作无法得到响应. 2. 阻塞操作使用多线程, 理由同上. 3. 多核CUP的设备使用多线程, 可以有效提高CPU的利用率. 4. 并行操作使用多线程. android中的多线程模型主要涉及的类有:Looper, Handler, MessageQueue, Message等. 一:Looper类: 1 static final ThreadLocal<Looper> sThreadLocal = new Th

Android消息处理机制(Handler 与Message)---01

一.handler的使用场景为么会有handler?(部分内容图片摘自http://www.runoob.com/w3cnote/android-tutorial-handler-message.html) 如有侵犯,请告知. 二.handler的消息处理机制 在Android中提供了一种异步回调机制Handler,使用它,我们可以在完成一个很长时间的任务后做出相应的通知. UI线程:就是我们的主线程,系统在创建UI线程的时候会初始化一个Looper对象,同时也会创建一个与其关联的Message

与多线程结合使用的消息处理类Handler、Message

1. 消息处理类——Handler 消息处理类(Handler)允许发送和处理Message或Runnable对象到其所在线程的MessageQueue中.Handerl有以下两个主要作用: 将Message或Runnable应用post()方法或sendMessage()方法发送到MessageQueue中,在发送时可以指定延迟时间.发送时间或者要携带的Bundle数据.当MessageQueue循环到该Message时,调用相应的Handler对象的handlerMessage()方法对其进