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中的内容进
行相应的操作。


发布评论