理解 Activity.runOnUiThread

转载链接

知识点

  • UiThread 主线程
  • Activity源码
final Handler mHandler = new Handler();
private Thread mUiThread;
// ...
public final void runOnUiThread(Runnable action) {
    if (Thread.currentThread() != mUiThread) {
        mHandler.post(action);
     } else {
         action.run();
     }
// ...
}
  • Looper
    作用:保持它的线程处于存活状态。
    创建 Looper 的时候,会一并创建一个消息队列(该队列持有消息(Message)对象)。
    注意点:
    (1)线程默认没有 Looper;
    (2)你可创建一个 Looper 并将它绑定到一个线程;
    (3)每一个线程只能绑定一个 Looper;

  • Message 消息
    定义:消息对象实际上就是一系列指令。
    如果我们希望一个 Runnable 在指定的线程运行,我们只需要将它放到一个消息里,并将这个消息放到对应线程的 Looper 消息队列就可以了!使用Handler实现

  • Handler
    定义、作用
    两种构造方法、post() 方法

  • 源码解释
    这段代码是在主线程中执行,这意味着 mHandler 指向主线程的 Looper。是的,应用主线程是唯一一个默认绑定了 Looper 线程。所以当这一行代码执行的时候:mHandler.post(action); Handler 会创建一条持有我们传入的 Runnable 的消息,这条消息随后被添加到主线程的消息队列,然后等待 Handler 在它的Looper线程(主线程)中执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值