php网站培训班湖北营销网站建设联系方式

web/2025/9/27 22:27:58/文章来源:
php网站培训班,湖北营销网站建设联系方式,wordpress读者墙插件,免费头像在线制作为了方便阅读将文章分为使用篇和源码解析两篇#xff0c;上一篇已经写了Handler是什么、有什么、怎们用#xff0c;这一片从源码的角度分析完整流程#xff0c;看看Handler消息机制到底是啥原理。才疏学浅#xff0c;如有错误#xff0c;欢迎指正#xff0c;多谢。 完整…为了方便阅读将文章分为使用篇和源码解析两篇上一篇已经写了Handler是什么、有什么、怎们用这一片从源码的角度分析完整流程看看Handler消息机制到底是啥原理。才疏学浅如有错误欢迎指正多谢。  完整流程首先初始化Handler并new一个CallBack重写handleMessage或者run方法等着用来接收消息。 然后使用handler的sendMessage发送消息。 流程已经明确涉及文件主要有Handler、Message、MessageQueue、Looper 1.Handler 1.1 Handler类有个handleMessage方法是个空方法等后面子类重写该方法上方便我们调用方自己实现并接收参数进行处理。就是我们上一篇中3.1的方式一那个TestHandler中的handleMessage方法接收数据的回调。 1.2 Handler类内部有个接口Callback只有一个方法 boolean handleMessage(NonNull Message msg)和Handler类的handleMessage方法同名; 就是我们方式二接收数据的回调。 1.3 我们怎们能收到消息呢他其实是依赖Looper的这里先说接收消息的最后一个流程一个核心方法Handler的dispatchMessage方法消息会在dispatchMessage方法被调用时送过来它会判断msg.callback如果不为空则调用它的run()方法,为啥呢因为它不是Handler内部的CallBack接口他就是个Runnable应用场景是上一篇中的场景五; msg.callback为空则判断Handler内部的CallBack对象是否为空如果不空mCallback.handleMessage(msg))反之则调用handleMessage(msg)详见dispatchMessage方法源码. public void dispatchMessage(NonNull Message msg) {if (msg.callback ! null) {handleCallback(msg);} else {if (mCallback ! null) {if (mCallback.handleMessage(msg)) {return;}}handleMessage(msg);} } 2. Message  Message类有个target成员变量就是handler后面也是通过这个对象回调给Handler的handleMessage的。 可能会发现我们从来没有对Message的target做过赋值的操作啊其实是源码将消息添加到仓库的时候都会将当前handler赋值给messegehandler的enqueueMessage方法将消息放入到对列前无条件赋值的不管现在是否已经有值然后调用MessageQueue的enqueueMessage方法将消息存储 handler的enqueueMessage方法 private boolean enqueueMessage(NonNull MessageQueue queue, NonNull Message msg,long uptimeMillis) {msg.target this;msg.workSourceUid ThreadLocalWorkSource.getUid();if (mAsynchronous) {msg.setAsynchronous(true);}return queue.enqueueMessage(msg, uptimeMillis); } 3.MessageQueue 插入enqueueMessage方法 消息仓库MessageQueue中的enqueueMessage方法这里是一个单链表循环赋值。 boolean enqueueMessage(Message msg, long when) {if (msg.target null) {throw new IllegalArgumentException(Message must have a target.);}synchronized (this) {if (msg.isInUse()) {throw new IllegalStateException(msg This message is already in use.);}if (mQuitting) {IllegalStateException e new IllegalStateException(msg.target sending message to a Handler on a dead thread);Log.w(TAG, e.getMessage(), e);msg.recycle();return false;}msg.markInUse();msg.when when;Message p mMessages;boolean needWake;if (p null || when 0 || when p.when) {// New head, wake up the event queue if blocked.msg.next p;mMessages msg;needWake mBlocked;} else {// Inserted within the middle of the queue. Usually we dont have to wake// up the event queue unless there is a barrier at the head of the queue// and the message is the earliest asynchronous message in the queue.needWake mBlocked p.target null msg.isAsynchronous();Message prev;for (;;) {prev p;p p.next;if (p null || when p.when) {break;}if (needWake p.isAsynchronous()) {needWake false;}}msg.next p; // invariant: p prev.nextprev.next msg;}// We can assume mPtr ! 0 because mQuitting is false.if (needWake) {nativeWake(mPtr);}}return true; } 还有一个取消息的next方法  从mMessages取消息也是工具方法由Looper来调用。代码较只截取一部分吧请自行翻阅源码查看 4.Looper 此时消息已经被添加到了MessageQueue我们看一下怎样取出来此时就要用到Looper类的loop方法代码较只截取一部分吧请自行翻阅源码查看 loop方法取消息有一个死循环调用上面提到的MessageQueue的next方法 - 取到msg为空就return终止不空则通过msg.target这个Handler调用dispatchMessage方法至此已明了  MessageQueue的next方法也有一个死循环两层死循环嵌套了; 需要调用Looper.loop()就开启了取消息模式相同的思考,我从来没有调用过那消息是怎么发给我的呢是的主线程的它同样是是在ActivityThread类的main方法里在调用Looper.prepareMainLooper();之后调用了Looper.loop();         ok穿起来了。  handler死循环不会anr是因为nativePollOnce方法当没有消息时会阻塞在这个native方法涉及Linux的pipi/epoll机制阻塞时主线程会释放CPU资源进入休眠状态知道下一个消息到达或者事物发生会通过pipe管道写入疏浚来唤醒主线程继续工作。主线程休眠和死循环区别休眠是在内核状态里主线程被挂起线程状态转移到休眠而死循环时主线程死锁在这里一直执行同一块代码无法再相应其他事件。只能确定这里native的方法死循环和咱应用层写的死循环不一样它不会使程序ANR里面具体实现原理请各位大佬自行研究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

合肥网站公司网站制作风格

GD官方提供的很多KEIL例程为KIEL4的版本,读者使用的时候可能会碰到使用KEIL5打开KEIL4的工程会报错以及无法找到芯片选型的问题,具体表现如下图所示。 我们该怎么办呢? 下面为大家介绍两种方法: 第一种方法是在keil4的工程后缀u…

网站建设视频教程集西安建设工程交易网

文章目录 1、ZAB协议介绍2、消息广播 1、ZAB协议介绍 ZAB 协议全称:Zookeeper Atomic Broadcast(Zookeeper 原子广播协议)。 Zookeeper 是一个为分布式应用提供高效且可靠的分布式协调服务。在解决分布式一致性方面,Zookeeper 并…

招设计师在哪里找模板网站建设乐云seo效果好

参考 (1) https://www.cnblogs.com/tongchengbin/p/7670927.html

淘宝页面设计的网站广东网络seo推广公司

提前说一点:如果你是专注于Python开发,那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了,而如果你和作者一样只是操作其他技术的Python API那就足够了。 本篇介绍一下Python的内置函数也叫高阶函数,就是Python自…

新余网站开发中山网站建点

SMS群发信息API接口支持哪些格式?如何使用API接口? SMS群发信息API接口被广泛应用于企业营销、客户服务、身份验证等多个领域。确保SMS群发信息API接口的安全性,已成为企业和开发者们必须重视的问题。AoKSend将探讨几种保障SMS群发信息API接…

东昌府聊城网站优化wordpress单本小说模板

1. 第一个坑 【gcc版本不匹配】 请确认你的gcc版本是不是12的,11是编译不通过的。 一般在最后编译时报错,在/var/log/nvidia-installer.log日志中可以看到以下字样 Warning: Compiler version check failed:The major and minor number of the compil…

葫芦岛市城乡建设局网站如何在手机上设计房屋装修效果图

Dynamic Web TWAIN用于快速部署 Web 应用程序的文档扫描 SDK,文档扫描SDK,,超过 5300 家公司信任 Dynamic Web TWAIN ,因其稳健性和安全性而受到超过 5300 家公司的信赖,Dynamic Web TWAIN 是一款基于浏览器的文档扫描…

目前网站开发状况wordpress远程图片模块

文章目录 文档列表文档下载文档列表

怎么进行网站推广做网站需要搭建服务器么

1.2D转换 转换(transform)你可以简单理解为变形 移动:translate 旋转:rotate 缩放:sCale 移动:translate 1.移动具体值 /* 移动盒子的位置: 定位 盒子的外边距 2d转换移动 */div {width…

怎么提高网站加载速度十大装潢公司上海

添加更多特征会使所有的模型变得更加复杂,从而增大过拟合的可能性。 在添加新特征或处理一般的高位数据集时,最好将特征的数量减少到只包含最有用的那些特征,并删除其余特征,这样会得到泛化能力更好、更简单的模型。 对于如何判…

网站设计找谁做网站建设资料

文章目录 @[TOC]1、 需求及效果1.1 需求1.2 效果2、 思路及SQL语句3、实现折叠明细表4、结语1、 需求及效果 1.1 需求 想要查看U8的审批流程,查看流程在哪个节点或人停留的时间,这个单据整个流程走下来需要的时间。可以更加直观方便的查看审批效率 1.2 效果 采用了SSRS上…

视频网站开发公司有哪些公司邢台哪儿能做网站

当涉及到与1688官方合作的API接口时,以下是一些建议和指导,以帮助您开始编写相关的代码。 了解API接口文档: 在编写与1688官方合作的API接口之前,首先需要了解1688官方提供的API接口文档。您可以在1688开放平台上找到相关的文档…

沈阳网站建设的价格佛山网站建设方案咨询

本文原word格式百度云盘下载地址:综述 2需求 2作者 2系统一览 2Unity3d客户端 2PHP后台 4准备 6XAMPP 6官网 6下载地址 6教程 6ThinkPHP 6官网 7项目所用版本 7下载地址 7快速入门 7完全手册 7步骤 7准备ThinkPHP 7修改MySQL设置信息 8检测是否成功 9扩展&#xff1…

集约化网站建设情况企业网站做备案

【1】基础学习笔记之opencv(1):opencv中facedetect例子浅析 http://www.cnblogs.com/tornadomeet/archive/2012/03/22/2411318.html【2】OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect http://blog.csdn.net/yang_xian521/arti…

wordpress 网站统计插件查网站流量的网址

我有一个使用MySQL作为后端的Django应用程序。我在原始MySQL记录显示一个值时遇到困难,但Django在Web应用程序中提供了其他内容。例如,我有一个客户端数据表。每条记录中的一个字段称为snailMailInvoice并且是Y / N选项 - 默认值是Y(varchar类型)。-----…

石油网页设计与网站建设深圳燃气公司网上营业厅

文章目录 为什么要有AVL树什么是AVL树AVL树的实现元素的插入平衡因子的更新AVL树的旋转 AVL树的检查完整实现 本篇总结的是AVL树中的全部内容,配有详细的图解过程 为什么要有AVL树 前面对map/multimap/set/multiset进行了简单的介绍,在其文档介绍中发现…

做网站网页的公司行业网站建设的开发方案

PLC_博图系列☞FB&FC 文章目录 PLC_博图系列☞FB&FC背景介绍FB&FC与C 类比博图中定义函数块 (FB)函数 (FC) 关键字: PLC、 西门子、 博图、 FC 、 FB 背景介绍 这是一篇关于PLC编程的文章,特别是关于西门子的博图软件。我并不是专业的P…

企业电子商务网站建设总结wordpress 中文主题网

在现代科技的迅猛发展下,直播系统源码平台被开发搭建出来,为人们的生活方式带来了很大的改变,直播系统源码平台的好友、短视频、直播、社区等功能让很多人越来越热衷于去在平台上刷视频、看直播、分享生活。用户的喜爱也督促了直播系统源码平…

深圳龙华做网站的互联网创业有哪些项目可以做

背景 今天在安装jenkins后,使用java运行war包的时候,提示jdk1.8版本太低,需要提高版本,所以就需要切换jdk版本 解决 在用户变量中,首先更改了JAVA_HOME的地址为17的目录,发现javac的版本改为17了&#x…

华为建站php编程软件

我们知道,继承,组合,重载,重写是java语言的面向对象实现的基本特征。 那么在java内部,究竟是如何实现这些面对对象的基本特征的呢?继承和组合是面向对象中代码复用的主要实现方式,他们可以达到类…