`

使用MessageHandler更新UI--步骤和原理

 
阅读更多

 

主线程执行UI更新操作,子线程执行耗时操作,子线程通过MessageHandler通知主线程更新UI

 

步骤如下:

1. MainActivity.java 中new一个Handler对象

   

Handler handler=new Handler()
{
    @Override
public void handleMessage(Message msg) {
        switch (msg.what)
        {
            case 1:
                //执行更新UI的操作
                textView.setText("更新UI");
                break;
            default:
                break;
        }
    }
};

 

2. 子线程执行一段耗时操作后,需要更新UI,此时可添加如下代码

new Thread(new Runnable() {
    @Override
public void run() {
        Message message=new Message();
        message.what=1;     
        handler.sendMessage(message);   
    }
}).start();

 

 

异步消息处理机制的原理:

1.Message

   Message是在线程之间传递的消息,用于不同线程之间交换信息

 

2.Handler

   在子线程中发送消息,然后在主线程中接收消息并进行处理

 

3.MessageQueue

   一个队列,存放Handler发送的消息

 

4.Looper

   不断从MessageQueue队列中取出消息,传递到Handler的handleMessage()方法中

 

5. message中传输数据

往message中添加数据

Bundle b = new Bundle();
        b.putInt("age", 22);
        b.putString("name", "loulijun");
        msg.setData(b);

 

//从message中取出数据

  Bundle b = msg.getData();
    int age = b.getInt("age");

 

 

分享到:
评论

相关推荐

    使用Handler实现异步更新UI例子

    在分析了Handler的工作原理和使用方法后,我们可以看到,异步更新UI的核心是利用了Android的消息传递机制,让主线程与工作线程之间能有效地协同工作。通过Handler,我们可以在不影响UI性能的情况下执行后台任务,...

    Android 的Handler消息传递机制.pdf

    - **处理Message**: 当Looper取出Message后,会调用主线程中Handler的`handleMessage(Message msg)`方法,开发者在此方法中根据`msg.what`进行不同的业务处理,并更新UI。 4. Looper的启动与停止 - 在主线程中,...

    自定义Handler-Looper实现线程间通信

    主线程的Looper会捕获这个Message,并将其交给Handler的handleMessage()方法处理,从而安全地更新UI。 在"HandlerLooperDemo"这个示例项目中,开发者可能创建了一个自定义的Handler类,定义了处理消息的逻辑。同时...

    智能家居系统 handler-教案.doc

    6. **课堂小结**:强调Handler的特点(如消息队列、回调处理)及其在实际项目中的作用,指出根据项目需求设计思路的重要性,以及在Android中正确使用Handler更新UI的难点。 通过这个教案,学生不仅能掌握Handler的...

    Android Handler运行原理

    通过以上分析,我们可以看出Android中Handler机制的核心在于利用Looper、MessageQueue和Handler三个核心组件,实现了线程间的通信。其中Looper负责管理MessageQueue,而Handler则是发送和接收消息的媒介。这种设计...

    Handler原理

    这个机制使得我们可以在工作线程中执行耗时操作,然后通过Handler向主线程发送更新UI的消息,确保UI线程始终保持流畅,避免了主线程被阻塞导致的ANR(Application Not Responding)问题。 在实际开发中,Handler...

    Handler的简单使用

    本篇文章将详细介绍`Handler`的基本概念、工作原理以及如何在一个`Activity`中简单使用它来实现动画效果。 `Handler`的核心功能是发送和处理消息。在Android系统中,主线程负责处理用户交互,如显示界面、更新UI等...

    Handler的基本使用

    Android应用的主要执行流程发生在主线程,也称为UI线程,负责处理用户交互和更新UI。而其他耗时的操作(如网络请求、文件读写等)应该在后台线程中进行,以避免阻塞主线程导致应用无响应(ANR)。 `Handler`、`...

    handler的简单示例

    在这个“handler的简单示例”中,我们将深入探讨Handler的工作原理及其在异步更新UI中的应用。 首先,Handler的核心概念是消息队列和Looper。在Android系统中,每个线程都有一个Looper对象,它负责循环读取并分发...

    Handler的使用

    在Android开发中,`Handler`是一个至关重要的组件,主要用于处理线程...在实际开发中,你可能需要结合其他组件,如`AsyncTask`,来更好地管理线程和更新UI。同时,也要注意线程同步和资源释放,避免出现不必要的问题。

    利用Handler实时更新时间

    在Android开发中,实时更新界面元素常常涉及到线程间的通信,这里主要讲解如何利用Handler、Timer、TimerTask和Message这四个关键组件来实现这一功能。首先,我们需要理解这些组件的基本概念和作用。 **Handler** ...

    应用源码之HandlerMessage2.zip

    通过对`HandlerMessage2.zip`中的源码进行深入学习,你可以更好地理解和掌握Android中的线程通信机制,这对于进行复杂的UI更新和异步任务处理至关重要。同时,这样的实践也能提升你的毕业设计质量和代码能力。

    A0402Handler发送消息和处理消息Message1

    A0402Handler发送消息和处理消息Message1 Handler 是 Android 中的一种机制,用于在不同的线程中传递和处理消息。...它可以帮助我们提高应用程序的响应速度和用户体验,但需要正确地使用和理解它的原理和机制。

    Handler消息处理机制+面试说.md

    2. **原理**:接着详细解释`Handler`的工作原理,包括`Looper`、`MessageQueue`以及`Handler`本身的创建和消息传递过程。 3. **应用场景**:举例说明`Handler`在实际开发中的应用场景,比如子线程与主线程通信、...

    android中的handler.zip

    在Android系统中,主线程(也称为UI线程)负责处理用户交互和更新UI。当需要在后台执行耗时操作(如网络请求或数据库操作)时,通常会创建新的线程。然而,这些后台线程不能直接修改UI,因为Android不允许非UI线程...

    handler简单使用

    在Android开发中,Handler是一种非常重要的机制,它与线程通信密切相关,用于处理来自其他线程的消息。本篇文章将深入探讨...了解Handler的工作原理以及如何正确使用,对于提升应用程序的性能和用户体验至关重要。

    【计算机专业-Andorid项目源码100套之】Adroid UI界面绘制原理分析

    当一个View需要更新时,会触发重绘,这个过程会经过 Choreographer、MessageQueue、Handler 和 ViewRootImpl等一系列组件,最终到达SurfaceFlinger服务,SurfaceFlinger负责合成所有的图层并将其显示到屏幕上。...

    Android应用源码之HandlerMessage2_应用.zip

    本压缩包"Android应用源码之HandlerMessage2_应用.zip"包含了关于如何在Android应用中使用Handler和Message来处理异步任务和更新UI的示例源代码。下面我们将深入探讨这两个核心组件以及它们在Android中的工作原理。 ...

    android handler

    以下是一个简单的使用Handler更新UI的例子: ```java // 创建Handler实例 Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // 更新UI TextView textView = (TextView) ...

Global site tag (gtag.js) - Google Analytics