Handler提供了一种消息机制用于线程间的通信。
默认情况下,Handler是运行在和创建它的线程同一个线程里的。Looper的机制可以改变这一点,通过在构造函数出传递一个looper,可以指定handler在和looper相同线程中执行。
1.可以在线程中调用 Looper.prepare(); Looper.myLooper() 得到一个当前线程的 looper。
2.Looper.getMainLooper(); 可以得到主线程的looper
3.handler.post(new Runnable(){..}) runnable里的代码和handler是在同一个线程中执行的,当然handler的 handleMessage() 方法也是在handler的同一线程
HandlerThread 可用于方便的创建一个新线程,然后获得一个looper,以便指定后续的handler在新的线程里执行。 而不用自己再去写一个线程类,然后创建looper等操作。
示例:
// Start up the thread running the service. Note that we create a
// separate thread because the service normally runs in the process's
// main thread, which we don't want to block. We also make it
// background priority so CPU-intensive work will not disrupt our UI.
HandlerThread thread = new HandlerThread("ServiceStartArguments", Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
handler常用于新线程中发送一个消息,然后再handleMessage中更新主线程的UI界面(此时handler必须是运行在主线程中的)。
参考:
http://www.android123.com.cn/androidkaifa/422.html
http://hi.baidu.com/%F0%D0%F0%C4%D6%ED/blog/item/d0c41217b590cd05c93d6d9a.html
http://panxq0809.iteye.com/blog/666255 Android中Message机制的灵活应用1,2
http://www.yuanma.org/data/2009/0706/article_3698.htm
http://rayleung.iteye.com/blog/411860
分享到:
相关推荐
在Android开发中,Looper、Handler和HandlerThread是三个非常重要的组件,它们构成了Android消息处理机制的基础,用于在主线程中处理来自其他线程的消息。理解并熟练运用这三个组件,对于编写高效、响应迅速的...
在Android开发中,理解核心组件如Looper、Handler和HandlerThread对于构建高效且响应式的用户界面至关重要。这些组件共同协作,确保UI线程不被阻塞,从而提供流畅的用户体验。 首先,主线程(也称为UI线程)是...
,这个题目有点意思,对于很多人来说,可能对Thread和Handler很熟悉,主要涉及到Android的消息机制(Handler、Message、Looper、MessageQueue),详见《 从Handler.post(Runnable r)再一次梳理Android的消息机制(以及...
由于HandlerThread保持着对Looper和关联Handler的引用,如果Handler引用了Activity或Context,可能导致Activity无法正常销毁。因此,最好在Activity的`onPause()`或`onDestroy()`方法中移除Handler的引用。 8. **...
在HandlerThread中,你可以创建一个Handler,并将它与线程的Looper关联,这样就可以在这个新线程中执行任务,然后通过Handler将结果或更新传递回主线程。在处理进度条更新时,HandlerThread可以在后台执行任务,当有...
通常,当我们需要创建一个新的工作线程来处理耗时任务时,需要手动初始化`Looper`和`Handler`,而`HandlerThread`则简化了这个过程,它内部已经创建了一个消息循环,可以方便地处理消息。 2. **`HandlerThread`的...
2. **创建Handler**:创建一个与`HandlerThread`的`Looper`关联的`Handler`,用于接收和处理消息。 3. **发送消息**:在需要执行后台任务的地方,使用`Handler`的`sendMessage()`或`post()`方法发送消息。 4. **处理...
HandlerThread handlerThread = new HandlerThread("handler_thread"); //在使用HandlerThread的getLooper()方法之前,必须先调用该类的start()方法,否则获得的值为空值; handlerThread.start(); //创建...
通常,当我们创建一个新的线程时,这个线程并没有内置的消息处理机制,而 `HandlerThread` 则在内部初始化了一个 `Looper` 对象,使得我们可以在该线程中通过 `Handler` 发送和处理消息。`Looper` 是 Android 中用于...
`HandlerThread` 的工作原理与普通的线程有所不同,它结合了`Handler`、`Looper` 和 `MessageQueue`,使得开发者可以在单独的线程中处理消息,避免阻塞主线程,提高应用程序的响应速度。 描述中的"handlerthread做...
`HandlerThread` 是一个内置了Looper的线程,它可以为长时间运行的任务提供一个独立的消息处理循环,避免阻塞主线程。下面将详细介绍`HandlerThread`的工作原理、使用方法以及它在实际应用中的价值。 ### 1. `...
这可以通过在HandlerThread的Looper上调用new Handler()来实现。 ```java Handler handler = new Handler(looper) { @Override public void handleMessage(Message msg) { // 在这里处理耗时任务 } }; ``` ...
5. **处理消息**:当HandlerThread中的Looper接收到消息时,会回调我们在Handler中重写的handleMessage()方法,我们在这里执行相应的操作。 6. **停止HandlerThread**:当不再需要HandlerThread时,可以调用`...
`HandlerThread` 是一个拥有 Looper 的线程,你可以在此基础上创建 Handler 来处理来自其他线程的消息。例如: ```java HandlerThread handlerThread = new HandlerThread("myHandlerThread"); handlerThread.start...
Looper,Handler和HandlerThread是Android解决异步编程问题的方法。 它们不是老派,而是一个精巧的结构,可在其上构建复杂的android框架。 Looper,Handler,HandlerThread是Android异步编程的基本解决方法。 ...
3. **获取Handler**:在`HandlerThread` 的`run()` 方法中,我们可以获取到与该线程关联的`Looper`,然后基于这个`Looper` 创建一个`Handler`。例如: ``` Looper looper = handlerThread.getLooper(); handler =...
`HandlerThread`是一个内置`Looper`的线程,简化了在新线程中使用`Handler`的流程。只需创建`HandlerThread`并启动,然后在其`Looper`上创建`Handler`即可。 7. **MessageQueue和Message** `MessageQueue`是`...