在子线程中使用Handler

  • 在子线程中使用handler就意味着handler的实例是在子线程中去创建的。
Looper.prepare();
mHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {Log.d(TAG," mHandler is coming");handler_main.sendEmptyMessage(1);}
};
mHandler.sendEmptyMessage(1);
Looper.loop();
  • 如果在调用之前必须调用Looper.prepare()方法,这个是在当前线程中创建一个looper出来,如果是普通的应用场景可以直接使用HandlerThread,其中是带有Looper的。
  • 第二点值得注意的就是,Looper.loop()这个方法是无限循环的,所以在Looper.loop()后边的程序代码块是无法执行到的。loop()方法的主要作用是一直不断的通过queue.next()方法来读取来自messagequeue中的msg,这个方法是block的状态,如果queue中没有消息的话会一直阻塞在这里。
  • 关于Looper还有一个方法,当我们需要获取Looper实例时,可以直接在对应线程调用Looper looper = Looper.myLooper();来获取,默认情况下,系统只会给MainT
    hread分配一个looper。

在子线程中更新UI

  • 这个听上去好像有点问题,其实不然,这句话是可以实现的。方法就是在子线程中获取UI线程的looper,然后再创建handler实例,在handlerMessage()方法中去更新UI。
handler_main = new Handler(getMainLooper()){@Overridepublic void handleMessage(Message msg) {helloTextView.setText("getMainLooper");}
};

今天写这篇文章主要是前几天被一个问题疑惑住了,如何在没有上下文的情况下使用子线程去更新UI,其实就是getMainLooper()获取UI线程的looper就可以了。关于Handler还有很多可以写的,下次有空再补上。

子线程中使用Handler相关推荐

  1. Android入门第37天-在子线程中调用Handler

    简介 前一章我们以一个简单的小动画来解释了Handler. 这章我们会介绍在子线程里写Handler.如果是Handler写在了子线程中的话,我们就需要自己创建一个Looper对象了:创建的流程如下: ...

  2. Android中Handler的使用方法——在子线程中更新界面

    本文主要介绍Android的Handler的使用方法.Handler可以发送Messsage和Runnable对象到与其相关联的线程的消息队列.每个Handler对象与创建它的线程相关联,并且每个Ha ...

  3. 安卓在子线程中实现更新UI界面的三种方法 Handler+Message、runOnUiThread、控件.post()

    1.说明 安卓中UI线程为主线程,更新UI界面必须在主线程中进行,在子线程中实现更新UI界面的三种方法:Handler.RunOnUiThread.控件.post() 2.1 Handler (1)定 ...

  4. Handler消息机制(四):子线程可以创建Handler吗

    默认情况下,ActivityThread类为我们创建的了主线程的Looper和消息队列,所以当你创建Handler之后发送消息的时候,消息的轮训和handle都是在ui线程进行的.这种情况属于子线程给 ...

  5. 【Android 异步操作】Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )

    文章目录 一.判定当前线程是否是主线程 二.子线程中执行主线程方法 三.主线程中执行子线程方法 一.判定当前线程是否是主线程 在 Android 中 , 如果要判定当前线程是否是主线程 , 可以使用如 ...

  6. Android子线程中更新UI的4种方法

    方法一:用Handler 1.主线程中定义Handler: Handler mHandler = new Handler() { @Override public void handleMessage ...

  7. Android进阶:六、在子线程中直接使用 Toast 及其原理

    最近因为个人原因,很久没有更文章,感谢关注的小伙伴,望谅解! 一般我们都把Toast当做一个UI控件在主线程显示.但是有时候非想在子线程中显示Toast,就会使用Handler切换到主线程显示. 但是 ...

  8. 为什么子线程中不能直接更新UI

    点击上方"dotNET全栈开发","设为星标" 加"星标★",每天11.50,好文必达 全文约4000字,预计阅读时间8分钟 当初有同事就碰 ...

  9. android 线程 界面,android开发教程之子线程中更新界面

    每个Handler对象与创建它的线程相关联,并且每个Handler对象只能与一个线程相关联. Handler一般有两种用途:1)执行计划任务,你可以再预定的实现执行某些任务,可以模拟定时器.2)线程间 ...

  10. 在子线程中更改主线程中的控件的信息,在子线程中用toast

    一丶在子线程中不允许更改主线程中的控件的信息,也不允许在子线程中用toast,我们要更改的话 (1)消息机制:使用handler (由主线程调用) 在主程序中Handler handler = new ...

最新文章

  1. 查找数组B中不在数组A中的元素
  2. 您试图在此 Web 服务器上访问的 Web 应用程序当前不可用
  3. Selenium WebDriver- actionchians模拟鼠标悬停操作
  4. WebShop WebSocket server 和WebSocket客户端的一对多关系维护
  5. Python排序算法之快速排序
  6. 【OpenCV 例程200篇】54. OpenCV 实现图像二维卷积
  7. Python+OpenGL实现物体快速运动时的模糊效果
  8. 前大厂员工谈中美企业区别,中企不用单元测试,仅靠QA检查代码?
  9. OpenStack云计算快速入门之三:OpenStack镜像管理
  10. 思科ASA防火墙升级为云端防火墙
  11. 发票查验系统帮你轻松解决发票管理各种问题
  12. Python2笨方法学习Python--习题二:注释和井号
  13. 信息论与编码2 BCH码的构造
  14. 动态代理之Waiter案例
  15. Java 是否应该使用通配符导入( wildcard imports)
  16. C语言中getch()的用法
  17. erc20根据合约地址获取所有交易记录
  18. 计算机架构设计的 8 个伟大思想
  19. stm32启用内部晶振(stm32设置外部晶振)
  20. 我的AI之路(54)--使用Pytorch内置的动作识别模型

热门文章

  1. 才发现Nero8出现了问题
  2. zjnu 1779 KRUŽNICE(线段树成段更新+离散化)
  3. sql server 2000 各版本的区别
  4. 【Tools系列】OneNote 2016 中同步笔记时出现0xE4010640错误
  5. 「算法学习」:求平方根
  6. pygame游戏素材预处理
  7. dbm与mysql区别_dbm数据库
  8. iOS短视频:基于GPUIMage的短视频录制(GPUImage自定义相机)
  9. 时区的转换nbsp;格林尼治标准时间(GMT…
  10. 【mysql】浮点类型