Handler推荐的构造方式

打开HandlerAPI文档后,我们会看到它的四个构造方法,以及其中两个的带有的长长的不推荐及其原因注释

// 不推荐的构造方法
public Handler();
public Handler(Handler.Callback callback);
// 推荐构造方法
public Handler(Looper looper);
public Handler(Looper looper, Handler.Callback callback);

推荐的构造方法中都需要明确传入Looper对象。这是因为隐式指定Looper对象具有很大的隐患。

虽然每一个线程只能存在一个Looper对象,但开启一个新的线程并不会自动创建一个新的Looper对象(主线程除外,创建主线程时会自动创建一个Looper对象)。如果我们打算从主线程发送Message到子线程处理,如果没有在子线程创建一个新的Looper对象,然后new Handler()这样创建Handler对象就会抛出错误,程序崩溃。

显式指定Handler关联的Looper对象比起让Handler隐式选择一个Looper对象的好处显而易见:它能避免Handler关联到不是你所期望的线程,还能给你提个醒,让你记得在需要的时候,给子线程开个Looper来提取Message


怎么样获得主线程的Looper?

Looper有一个静态方法,可以获取到主线程的Looper

public static Looper getMainLooper ();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值