Android中有关Handler的使用(一)
一个Handler允许你发送和处理消息(Message)以及与一个线程的消息队列相关的Runnable对象。每个Handler实例都和单个线程以及该线程的消息队列有关。当你创建了一个新Handler,它就会和创建它的线程/消息队列绑定,在那以后,它就会传递消息以及runnable对象给消息队列,然后执行它们。
需要使用Handler有两大主要的原因:
(1)在将来的某个时间点调度处理消息和runnable对象;
(2)将需要执行的操作放到其他线程之中,而不是自己的;
调度处理消息是通过调用post(Runnable), postAtTime(Runnable, long), postDelayed(Runnable, long), sendEmptyMessage(int), sendMessage(Message), sendMessageAtTime(Message, long)和sendMessageDelayed(Message, long)等方法完成的。其中的post版本的方法可以让你将Runnable对象放进消息队列;sendMessage版本的方法可以让你将一个包含有bundle对象的消息对象放进消息队列,然后交由handleMessage(Message)方法处理。(这个需要你复写Handler的handleMessage方法)
【以上这段翻译自android sdk】
Handler在实际开发中是很常用的,主要是用来接收子线程发送的数据,然后主线程结合此数据来更新界面UI。
Android应用程序启动时,他会开启一个主线程(也就是UI线程),管理界面中的UI控件,进行事件派发,比如说:点击一个按钮,Android会分发事件到Button上从而来响应你的操作。但是当你需要执行一个比较耗时的操作的话,例如:进行IO操作,网络通信等等,若是执行时间超过5s,那么Android会弹出一个“经典”的ANR无响应对话框,然后提示按“Force quit”或是“Wait”。解决此类问题的方法就是:我们把一些耗时的操作放到子线程中去执行。但因为子线程涉及到UI更新,而Android主线程是线程不安全的,所以更新UI的操作只能放在主线程中执行,若是放在子线程中执行的话很会出问题。所以这时就需要一种机制:主线程可以发送“命令/任务”给子线程执行,然后子线程反馈执行结果;
!你必需要知道的:
若在主线程中实例化一个Handler对象,例如:
Handler mHandler = new Handler();
此时它并没有新派生一个线程来执行此Handler,而是将此Handler附加在主线程上,故此时若你在Handler中执行耗时操作的话,还是会弹出ANR对话框!
下面就Handler的使用举一些例子,加深理解。
1、post版本的Handler使用示例:
Logcat显示如下:
说明:发现thread id是相同的,这就说明:默认情况下创建的Handler会绑定到主线程上,你不能做太耗时的操作。
本文暂止,下文我们会介绍sendMessage版本的Handler的使用。
分享到:
相关推荐
在非主线程中使用Handler,需要先调用`Looper.prepare()`初始化Looper,然后创建Handler,最后调用`Looper.loop()`开始消息循环。完成后,记得调用`Looper.quit()`结束消息循环,防止内存泄漏。 7. **使用场景**:...
本文将深入探讨Android中的Handler机制及其使用方法。 首先,理解Handler的基本概念。Handler是Android消息处理系统的一部分,它与Looper和Message紧密协作,用于在不同线程之间传递消息和执行任务。通常,主线程...
通过理解以上知识点,开发者可以灵活地在Android应用中使用`Handler`进行线程间通信,高效地处理异步任务和UI更新。在实际开发中,结合`Handler`、`Looper`、`Thread`以及`Runnable`,可以构建出复杂而稳定的多线程...
在Android开发中,`Handler`是一个至关重要的组件,它用于处理与UI线程交互的异步消息通信。本文将深入探讨`Handler`的工作原理、如何使用以及它在Android应用程序中的实际应用。 `Handler`机制是Android系统为了...
Android 中 Handler 的使用方法和总结 Handler 是 Android 中的一种非常重要的组件,它起到了十分重要的作用。Handler 主要用于异步消息的处理,当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回...
【Android Handler 使用详解】 Handler 是 Android 平台中用于处理线程间通信的关键组件,尤其在涉及 UI(用户界面)更新时,它扮演着至关重要的角色。在 Android 应用程序启动时,系统会默认创建一个主线程,也...
在Android开发中,Handler是一个至关重要的组件,它与线程、消息队列和Looper紧密关联,用于实现不同线程间的通信。本篇将深入探讨Handler的基本概念、使用方法以及其在多线程环境中的作用。 1. Handler是什么? ...
本教程将介绍如何使用Android Studio和Handler组件来创建一个简单的计时器应用。Handler是Android中的一个关键组件,它允许开发者在不同的线程之间发送和处理消息,从而实现异步操作。 首先,我们需要了解Android ...
本示例中的“android demo”就是关于如何利用Handler的`postDelayed`方法和`Runnable`接口来实现一个延时3秒的Splash Screen。下面将详细解释这个过程以及涉及的技术点。 1. **Handler**: Handler是Android中处理...
在上面的代码中,我们首先在 UI 线程中创建了一个 Handler,然后在后台线程中执行了一些操作,并将结果通过 Message 发送给 Handler,Handler 将其处理并将结果显示给用户。 Handler 和 Message 机制是 Android 多...
首先,`Handler`是Android中的一个类,它允许开发者在不同的线程之间发送和处理消息。通常,我们会在主线程(UI线程)中创建一个Handler实例,这样处理的消息就会在这个线程中执行,这对于更新UI是必要的,因为...
Handler是Android中处理消息和调度任务的对象,它通常与Looper和Message配合使用,实现线程间的通信。主线程中默认有一个Looper对象,负责接收和分发Message,而Handler则用来发送Message到Looper,从而实现主线程的...
Android的Handler使用方法总结,不错的文档,跟大家分享分享
在“androidHandler测试的demo”中,我们可以预期包含以下内容: 1. 创建自定义`Handler`子类:这个子类可能重写了`handleMessage(Message msg)`方法,根据`msg.what`的值执行不同的操作,比如更新UI元素或执行特定...
如果要在其他线程中使用Handler,需要手动调用Looper.prepare()和Looper.loop()来创建并启动Looper。 Handler的使用流程主要包括以下步骤: 1. **创建Handler**:首先,你需要创建一个Handler对象,通常在主线程中...
2. 在 Activity 或 Service 中使用 Handler 处理来自线程的消息。 Handler 的优点是: 1. 实现了线程之间的通信,提高了应用程序的响应速度和效率。 2. 提高了应用程序的灵活性和可扩展性。 Handler 的缺点是: ...
Handler是Android中的一个消息处理类,它主要用来处理运行在主线程中的Message对象。通过创建一个Handler实例并与Looper(消息循环)关联,我们可以发送和处理Message,从而实现在不同线程间的数据传递和回调。 在...
如果在其他线程中使用Looper,需要先调用Looper.prepare()初始化,然后调用Looper.loop()开始消息循环。 - Looper.loop()会进入一个无限循环,不断调用Looper的pollNext()方法检查Message Queue是否有新消息。 - 当...
在Android开发中,`Handler`消息传递机制是实现线程间通信的重要手段,尤其是在更新UI时。本项目中,我们看到一个简单的计数器应用,它利用`Handler`来每秒增加文本框中的数字,直到达到100为止。下面我们将深入探讨...
在Android开发中,`Handler`是一个至关重要的组件,它用于处理线程间的通信,特别是主线程(UI线程)与工作线程之间的交互。本文将深入探讨`Handler`的使用,包括其工作原理、创建与使用方法以及常见应用场景。 ###...