ThreadUtils

134 篇文章 0 订阅
36 篇文章 0 订阅
ThreadUtils:

提供了对Android的handler一系列封装简化操作,项目必备。

<1>该类内部会维护一个UIhandler<new Handler(Looper.getMainLooper())>, 出于lazyInit的目的,该handler作为某个
   内部static类的private static成员并在该class被load的时候才会真正的初始化为UIhandler。外部的ThreadUtils类可以直接
   通过该static类来引用此UIhandler,不要惊奇,java中,此内部类的private成员可以被其所在外部类直接引用
   <并且也可以被同属于一个外部类的其他内部类直接使用>。

<2>判断是否run在UI thread<不严谨,对于Service这种来说,是没有UI thread的,只有main thread>,
   Looper.getMainLooper() == Looper.myLooper()。

<3>一个mainThreadEnforcer/Checker, 在发现当前的thread不是mainthread时,会throw一个IllegalStateException,
   同样相对的还有一个noMainThreadEnforcer/Checker。
   还有一个只在debug下才会进行check mainThread的Checker.   

<4>有了UIThreadHandler,就可以直接将post 一个 runnable到main thread这种操作进行封装了,还包括对postDelayed的封装。

<5>runOnUiThread()有两种case: 已经在UI thread,直接Runnable.run(), 不在UI thread,那么post到UI thread。
   一个是同步返回,一个是异步返回,这要求调用者对这个很清楚。
   还有对FutureTask<T>/Callable<T>的相同实现, Callable会被封装到一个FutureTask

<6>runOnUiThreadBlocking,为了实现blocking,必须借助于FutureTask,在将task post到UI thread以后<当然也有可能本身就在main    
   thread,直接run就可以了>,调用task.get()来进行等待,注意get()会抛出InterruptedException/ExecutionException,
   需要将这些Exception再封装为RuntimeException throw出去。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值