2024年4月8日发(作者:)

Android中UI线程与后台线程交互设计的5种方法

我要发表看法

我想关于这个话题已经有很多前辈讨论过了。今天算是一次学习总结吧。

在android的设计思想中,为了确保用户顺滑的操作体验。一些耗时的任务不能够

在UI线程中运行,像访问网络就属于这类任务。因此我们必须要重新开启一个后台线程

运行这些任务。然而,往往这些任务最终又会直接或者间接的需要访问和控制UI控件。

例如访问网络获取数据,然后需要将这些数据处理显示出来。就出现了上面所说的情况。

原本这是在正常不过的现象了,但是android规定除了UI线程外,其他线程都不可以对

那些UI控件访问和操控。为了解决这个问题,于是就引出了我们今天的话题。Android

中后台线程如何与UI线程交互。

据我所知android提供了以下几种方法,用于实现后台线程与UI线程的交互。

1、handler

2、IThread(Runnable)

3、(Runnable)

4、layed(Runnabe,long)

5、AsyncTask

方法一:handler

handler是android中专门用来在线程之间传递信息类的工具。

要讲明handler的用法非常简单,但是我在这里会少许深入的讲一下handler的运

行机制。

为了能够让handler在线程间传递消息,我们还需要用到几个类。他们是looper,

messageQueue,message。

这里说的looper可不是前段时间的好莱坞大片环形使者,他的主要功能是为特定单

一线程运行一个消息环。一个线程对应一个looper。同样一个looper对应一个线程。这

就是所谓的特定单一。一般情况下,在一个线程创建时他本身是不会生产他特定单一的

looper的(主线程是个特例)。因此我们需要手动的把一个looper与线程相关联。其方

法只需在需要关联的looper的线程中调用e。之后我们再调用

启动looper。

说了这么多looper的事情,到底这个looper有什么用哪。其实之前我们已经说到

了,他是为线程运行一个消息环。具体的说,在我们将特定单一looper与线程关联的时

候,looper会同时生产一个messageQueue。他是一个消息队列,looper会不停的从

messageQuee中取出消息,也就是message。然后线程就会根据message中的内容进

行相应的操作。