返回顶部
首页 > 资讯 > 后端开发 > Python >总结--3
  • 857
分享到

总结--3

2023-01-31 01:01:54 857人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

主线程创建的时候会默认创建Looper、HandlerThread则是内置Looper,除此之外其他的线程创建时是不会创建Looper的,需手动创健线程自己的Looper。子线程更新主线程创建的控件引发的错误:Only the origin

线程创建的时候会默认创建Looper、HandlerThread则是内置Looper,除此之外其他的线程创建时是不会创建Looper的,需手动创健线程自己的Looper。

子线程更新主线程创建的控件引发的错误:Only the original thread that created a view hierarchy can touch its views

默认情况下Handler会与其被定义时所在线程的Looper绑定,比如,在主线程中定义,其是与主线程的Looper绑定。

HandlerThread实际上就是一个Thread,只不过它比普通的Thread多了一个Looper。Looper 和MessageQueue的关系:MessageQueue是Looper类的成员变量。主线程被创建之后会默认创建Looper,这个Looper是属于主线程的,他会为主线程创建MessageQueue消息循环队列。

看具体代码分析:

wKiom1Nw4DLTdlnGAAGoyJar7Xk458.jpg

这段代码会报错,会提示说子线程不能更新主线程的控件,为什么?


wKiom1Nw4MHRVNYeAABt5kpwY6c857.jpg

首先创建名字叫“MyHandlerThread”的线程,这个阶段同时也为这个线程默认创建了Looper(消息循环器)、和MessageQueue(消息队列)。

wKiom1Nw4SrjmBZJAAAxxoLctfM364.jpg

表示将Handler绑定到线程“MyHandlerThread”的Looper,让Handler专门来处理Looper的消息


wKiom1Nw4VWztcldAAEX9KdUyT4378.jpg

将实现Runnable的对象,作为Message对象传给线程“MyHandlerThread”的MessageQueue,当线程“MyHandlerThread”的Looper拿出这个消息的时候,发现这个消息是实现Runnable接口的类的对象,于是就会去掉用回调函数run(),其实就是把回调函数的代码拿到线程“MyHandlerThread”里来执行。

如果创建一个子线程,你希望自己的子线程能够有自己的Looper、Handler、MessageQueue你有两种方法,一种是像之前创建线程一样,但要在重写的run{}方法里,为线程创建Looper,这种方法比较麻烦,可以直接使用HandlerThread,没必要在重写run{},因为HandlerThread的run()方法其中涉及到Looper的创建和启动,Looper.loop()一执行就会进入死循环,就算你重写HandlerThread的run()也没用,那里的代码没机会被执行,因为此时正在执行Looper.loop()这个死循环。

继承Thread重写run()没有调用super.run(),HandlerThread重写时就有:

Spuer.run()系统自己自动加的,HandlerThread和Thread不大一样,他有自己的Looper,而HandlerThread的run()方法就是来创建Looper的,系统要确保这个函数会被执行,所以要在覆盖他的函数里添加super.run()来调用HandlerThread的run()方法。

为什么在子线程内部创建Handler会报错:那是因为子线程没有Looper,你可以不要将Handler对象放在子线程,可以放在主线程,因为主线程的Looper是默认创建的,这样借用主线程的Handler和Looper来处理消息。或者你也可以为子线程创建Looper,这样子线程就有一套自己的Looper、MessageQueue、Handler,就可以来在子线程内处理消息,创建子线程的Looper:  Looper  looper  = Looper.myLooper ( );


--结束END--

本文标题: 总结--3

本文链接: https://lsjlt.com/news/183282.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 总结--3
    主线程创建的时候会默认创建Looper、HandlerThread则是内置Looper,除此之外其他的线程创建时是不会创建Looper的,需手动创健线程自己的Looper。子线程更新主线程创建的控件引发的错误:Only the origin...
    99+
    2023-01-31
  • MySQL总结-3
      1、连接  mysql -u username -ppassword -P 3306 -D database -hip 2、列显示:"\G" mysql> select * from HUMMOCK_BLACK_LIST...
    99+
    2023-01-31
    MySQL
  • python 学习总结3
    Python蟒蛇绘制 一、实现程序如下 1 import turtle 2 turtle.setup (650, 350, 200, 200)#turtle的绘图窗体turtle.setup(width, height, start...
    99+
    2023-01-30
    python
  • ExtJS样例总结 -3
    http://tianya23.blog.51cto.com/1081650/813863 http://tianya23.blog.51cto.com/1081650/821649 1、Ajax标准请求: Ext.Ajax.request...
    99+
    2023-01-31
    样例 ExtJS
  • IPSec ×××配置总结 3
      1.      用路由器实现站点到站点的EZ××× EZ×××有的也写作Easy ×××,顾名思义就是容易使用的×××。它是Cisco开发的用于简化远程端配置和管理的一种基于IPSec ×××的实现,降低了×××在实施过程中的复杂程度。...
    99+
    2023-01-31
    IPSec
  • BGP学习 总结3
      BGP DECISION PROCESS 1 largest weight ( local orininated path :32768 other 0 ) 2 largest local-preefernce (BGP default...
    99+
    2023-01-31
    BGP
  • AIX 5L学习总结3
    1.-bash-3.00$ prtconf | more //查看配置信息可以看到大部分配置信息。 -bash-3.00$ prtconf | more System Model: IBM,9110-51A Machin...
    99+
    2023-01-31
    AIX
  • jdbc学习总结3------javab
     1.测试类的内容: 在包:com.hanchao.test中   package com.hanchao.test;  import com.hanchao.dao.UserDao; import com.hanchao.entity.U...
    99+
    2023-01-31
    jdbc javab
  • java面试大总结(3)
    101、java中会存在内存泄漏吗,请简单描述。 会。如:int i,i2;  return (i-i2);   //when i为足够大的正数,i2为足够大的负数。结果会造成溢位,导致错误。   ...
    99+
    2023-01-31
    java
  • Kubernetes 学习总结(3) M
    APIserver符合RESTful风格,支持GET/PUT/DELETE/POST等各种操作。所以也支持kubectl通过一系列命令对各处资源进行管理控制。常用的资源1)、workLoad(工作负载型资源,运行APP,对外提供服务): P...
    99+
    2023-01-31
    Kubernetes
  • 2020年3月Android面试总结:
    前言: 由于新冠状病毒隔离的原因 去年离职到现在一直没有办法找工作 在深圳呆了一个多月了 java基础也复习了一遍 总体来说还是有些收获...
    99+
    2022-06-06
    Android
  • Java 多线程学习总结3
    在上一篇中,我们当然希望a++,b++执行完之后,show方法再来show.我们需要的是“原子”动作,一次性地把a++,b++不间断地执行。在java中是利用“互斥”的方法,互斥谁呢?互斥的是相同对象的加锁代码。如果我们把第一篇的SomeB...
    99+
    2023-01-31
    多线程 Java
  • 将近3个月的实习总结
         这篇文章应该写的更早写,但是一直忙学校的论文,其实这个也是借口,如果想要做什么事,怎么都会有时间的。      ......      将近3个多月的实习,发现收获最多的一天就是最后一天,准备离开的时候和鹏叔在外面聊天,然后 突然...
    99+
    2023-01-31
    个月
  • Android View移动的3种方式总结
    前言 在Android开发中,View一直是Android开发人员的一块心病,一方面想要进阶,一方面又害怕进阶,可以说Android的View是进阶路上的最大绊脚石,因为它涉及...
    99+
    2022-06-06
    view Android
  • SQL去重的3种实用方法总结
    目录1.distinct去重2.group by去重3.row_number() over (parttion by 分组列 order by 排序列)补充:SQL根据某列或几列分组去重——row...
    99+
    2024-04-02
  • 总结从HTTP到HTTP/3的发展简史
    这篇文章主要讲解了“总结从HTTP到HTTP/3的发展简史”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“总结从HTTP到HTTP/3的发展简史”吧!虽然 H...
    99+
    2024-04-02
  • Uniapp接入插件的3种方式总结
    目录前言一、使用HBuilderX导入插件1.找到所需插件2.导入插件3.使用插件二、通过uni_modules单独安装插件1.创建uni_module目录2.下载并安装插件3.使用...
    99+
    2023-05-19
    uniapp插件使用 uni app插件 uniapp安装插件
  • MySQL8.0安装中遇到的3个小错误总结
    前言 过去公司都是用的5.7 系列的MySQL,随着8.0的发版,也想试着升级一下。遇到了两个小错误,记录在此。 在开始之前,如果对MySQL8.0安装步骤不清楚的朋友们可以参考这篇文章:https://w...
    99+
    2024-04-02
  • python运行cmd命令行的3种方法总结
    目录1.执行cmd命令,不显示执行过程中弹出的黑框2.执行cmd命令,并得到执行后的返回值,python调试界面输出返回值3.执行cmd命令,并得到执行后的返回值,python调试界...
    99+
    2024-04-02
  • Go语言高效编程的3个技巧总结
    目录不要使用Logrus不要使用encoding/json尽可能不要在goroutine中使用闭包总结不要使用Logrus 这其实和泛型有关。因为Go语言是一门强类型的静态语言,所以...
    99+
    2023-01-03
    Go语言编程 go 语言高级编程 go语言高效编程
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作