首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android为什么不能在子线程更新UI

viewRootImpl对象是Activity中onResume方法执行完成之后,View变得可见时才创建之前操作是没有进行线程检查,所以没有报错。...ViewRootImpl是ActivityonResume()方法后面创建出来,所以onResume之前UI更新可以子线程操作而不报错,因为这个时候ViewRootImpl还没有创建,没有执行...ViewRootImpl#checkThread 没有被调用到,也就是说,检测当前线程是否是创建 UI 那个线程 逻辑没有执行到,所以程序没有崩溃一样能跑起来。...任何线程都可以更新自己创建UI,但是需要满足各自对应条件 ViewRootImpl 还没创建出来之前。UI 修改操作没有线程限制。因为 checkThread 方法不会被执行到。...Android 中 SurfaceView 通常会通过一个子线程来进行页面刷新

1.4K20

有遇到布署服务器后刷新404问题吗?

我们先还原一下场景: vue项目本地时运行正常,但部署到服务器中,刷新页面,出现了404错误 先定位一下,HTTP 404 错误意味着链接指向资源不存在 问题在于为什么不存在?...为什么history模式下有问题 Vue是属于单页应用(single-page application) 而SPA是一种网络应用程序或网站模型,所有用户交互是通过动态重写当前页面,前面我们也看到了,不管我们应用有多少页面...index.html 文件,然后我们跳转路由进入到 www.xxx.com/login 关键在这里,当我们 website.com/login 页执行刷新操作,nginx location 是没有相关配置...:hash 虽然出现在 URL 中,但不会被包括 HTTP 请求中,对服务端完全没有影响,因此改变 hash 不会重新加载页面 hash 模式下,仅 hash 符号之前内容会被包含在请求中,如 website.com...JS来执行视图切换, 当我们进入到子路由时刷新页面,web容器没有相对应页面此时会出现404 所以我们只需要配置将任意页面都重定向到 index.html,把路由交由前端处理 对nginx配置文件.

7.9K31
您找到你想要的搜索结果了吗?
是的
没有找到

从开发一款基于Vue技术栈全栈热重载生产环境脚手架,学到了什么?

先拆分解释下:全栈意思是支持前后端;热重载这个名词相信大家很熟悉,就是页面每次改动,不需要手动去刷新,可自动刷新;生产环境这里你可以理解成线上环境,用户使用环境。...如果在编辑器中对html文件增加或删除了元素,或者是css文件中修改了某个元素某个样式,然后想在浏览器中看到效果,通常步骤是:把窗口切换到浏览器,然后按键盘上F5刷新页面。...body-parser是处理程序之前中间件中解析传入请求体,可以request.body中获取从前台传来数据。...找它之前也找到其他可以实现自动刷新浏览器插件,如:LiveReload,它也可以自动刷新页面,实时预览html效果。但是,为什么没用LiveReload呢?...之前那样不停地F5,有没有觉得这个动作对程序员来说很没有创造力呢?现在可以减轻左手和F5键负担了。 结语 谢谢阅读,希望没有浪费你时间。

59420

解决 Tomcat9w.exe 无法启动服务问题更新后 Tomcat9 Properties 配置不匹配问题

为什么 Tomcat9w.exe 无法启动 Tomcat 服务?...可能有人会说,我们直接在后面的…中匹配本地信息不就行了?这个答案是否定且不可取,你会发现在你确定并应用之后重新点开 Tomcat9w.exe 还是之前配置信息并没有得到修改。解决方式如下。...以下窗口可以看到以下 Tomcat 自动匹配到配置信息,(同时也会弹出一个 Java 程序执行窗口),两者都有的话说明 Java 以及 Java 运行环境是没有问题,否则会有提示,我们根据提示进行修改即可...3.1、重装系统 Tomcat service 服务 DOS 命令行,输入service.bat remove移除之前旧版本配置信息: ?...3.3、启动 Tomcat9w.exe start 可以看到 Tomcat 服务已经成功启动: ? 刷新地址栏信息,404 页面变为 Tomcat 服务器测试页面,成功。 ?

3.4K32

uni-app实战之路-生命周期

写在前面 首先说一下什么是生命周期,不管是vue还是别的什么,生命周期说人话就是页面从初始化到销毁整个过程被称为生命周期,vue生命周期的话帖子之前也没写过,也不知道整天做什么呢,这都不写,一样吧...uni-app生命周期 uni-app生命周期 我们没有进行描述之前首先要明白是,uni-app生命周期是氛围三部分,分别是应用生命周期、页面的生命周期和组件生命周期,那么分别对应项目中哪一个文件...onShow 这里onshow就很奇怪了,和onLaunch是一样,但是为什么还有有一个onshow呢?不要着急,当我们第一次启动小程序以后,确实可以看到,这里是两个状态同时显示: ?...这里可以看出来,这里只执行了一次onLoad,但是每次切换时候onShow都会被执行 onReady 这个很有意思,理解是vue里面的created和mounted关系,这个是页面挂载技术执行...注意:这里如果直接全局设置的话,那么我们每一个页面都会有这个下拉功能,只是说不会触发该页面的函数,因为函数是独立,那么如果我们不需要每一个都有的话,就可以直接在对应页面下面进行设置该选项:比如说我们首页不需要下拉刷新功能

1.5K20

修复了一个 Vite Bug,让项目首屏性能提高了 25%

一次偶然机会,将项目(基于 tdesign-vue-next-starter )由 Vite 2.7 升级成 Vite 3.x 后,发现首次运行 Vite dev 构建,页面首屏时间非常长,且一定会整个页面刷新一次...充满好奇心,决定研究一下为什么 Vite.3.x 会有这么一个负优化,于是仔细研究源码,最终发现了问题根源,并给 Vite 提交了修复代码图片大概测了一下,修复前页面首屏时间为 1m06s,...导致运行代码时,多次发现新依赖(没有进行预构建),导致又要重新执行预构建,最后还刷新页面。因此可能问题根源是:Vite 依赖扫描没有扫描到所有的依赖。...为了进一步了解 Vite 运行机制,我们研究一下这个问题:为什么依赖扫描不全,会导致后面的一系列问题(依赖重新构建、页面刷新)?...因此新依赖,必须要等构建完成才能返回,期间会造成阻塞为什么只有最后一次依赖预构建才会刷新页面

1.2K30

页面分部分加载呈现收集(不断更新中)

针对asp.net要注意一点,除非使用了Response.Write()和Response.WriteLine()等直接把内容写到响应流中外,Render事件之前任何操作内容都还没写到Response...也就是说aspx页面html等,和aspx.cs文件中添加到控件树内容Render事件之前还没写入Response中。...加上使用该方法和把页面缓存buffer设为false都会出现 “/”应用程序服务器错误。 会话状态已创建一个会话 ID,但由于响应已被应用程序刷新而无法保存它。...异常详细信息: System.Web.HttpException: 会话状态已创建一个会话 ID,但由于响应已被应用程序刷新而无法保存它。  ...问题,解决方法是加一个Global.asax文件就ok了。具体为什么还没找到答案。。。。。

1.2K90

vue填坑记录:刷新浏览器,router导航守卫不响应

指的是手动刷新浏览器,不是用router程序刷新),因为程序里router有设置 导航守卫 beforeResolve 用于数据预加载使页面呈现效果。...但是,刷新页面后,一直没有响应这个导航守卫。...因为应用程序是打算同时支持vue SSR 和 普通 VUE 程序,兼容代码写法,不像在vue-cli上客户端加一套逻辑。而且,有守卫导航这个好东西,就是解决这个需求。...然而,非ssr应用里,,,我们应该是router.resolve()之前就应该设置这个导航,不能等页面router解析好了才设置。...这就是为什么刷新页面没有响应,切换页面时正常原因所在。 解决办法:把resovle移动到ready函数外面。当然,为了ssrno double-fetch,,,加一个判断即可。

5.6K20

Tomcat 服务:解决 Apache Tomcat 更新后 Tomcat9w.exe 无法启动 Tomcat 服务问题

为什么 Tomcat9w.exe 无法启动 Tomcat 服务?...为什么 Tomcat9w.exe 无法启动 Tomcat 服务?...这个答案是否定且不可取,你会发现在你确定并应用之后重新点开 Tomcat9w.exe 还是之前配置信息并没有得到更新修改,解决方式如下。...以下窗口可以看到以下 Tomcat 自动匹配到配置信息,(同时也会弹出一个 Java 程序执行窗口),两者都有的话说明 Java 以及 Java 运行环境是没有问题,否则会有提示,我们根据提示进行修改即可... start 这个时候重新启动 Tomcat9w.exe start,可以看到 Tomcat 服务已经成功启动,具体如下图所示: 刷新地址栏信息,404 页面变为 Tomcat 服务器测试页面

1.6K30

探究网页资源究竟是如何阻塞浏览器加载

测试前环境准备 测试之前我们需要对浏览器下载资源速度进行控制,将它重新设置为 50kb/s,操作方式: 打开 Chrome 开发者工具; Network 面板下找到 Disable cache 右侧下拉列表...为什么是这个结论呢?试想一下页面渲染流程就知道了。.../4.0.0-alpha.6/css/bootstrap.css" rel="stylesheet" /> 此时刷新浏览器,页面上会马上显示出 是 h1 标签 字样,当 3 到 4...面板下没有打印内容,而当样式加载完成时候打印了 888,这就说明 CSS 会阻塞定义在其之后 JS 执行。...动态脚本会造成阻塞嘛 对于如下这段代码,当刷新浏览器时候会发现页面上马上显示出 是 h1 标签,而过几秒后才加载完动态插入脚本,所以可以得出结论:动态插入脚本不会阻塞页面解析。 <!

2K30

dom更新到底javascript事件循环哪个阶段?「前端每日一题v22.11.17」

看到这个问题时候,冷然一笑,这不是明显着么?肯定是事件循环中异步任务队列,任务队列又分为宏任务和微任务,dom更新微任务队列清空之后,宏任务队列开始之前。...查找原因 认为发现了一个巨大bug之后,然后疯狂搜集资料,发现所有结论都是dom更新确实是微任务之后,那为什么表现不一致呢? 是不是浏览器没来得及更新?...于是弹出alert时候,查看了一下dom元素 发现虽然页面没有,但是dom元素已经正常DOM上了,这就涉及到另一个问题了,浏览器GUI线程更新机制 UI线程和js线程 我们都知道,浏览器对于...所以浏览器中,js线程和gui线程是互斥,只能允许一个线程进程任务执行,js线程运行时,gui线程是不会运行 有了这个基础,我们讨论一下动画,这里涉及到一个概念,那就是刷新刷新率 我们平时也会经常听到刷新率这个词...,我们可以理解为浏览器要在这16.6毫秒以内完成js脚本和浏览器渲染 回到正题 到这里就很好理解了,我们刚开始执行那段js代码时候,虽然元素下看dom已经更新到dom树上了,但是浏览器并没有刷新

72730

维护了这么久服务器,你真的认识 Web 缓存体系?

当遇到加载JS会阻塞,你会看到一个页面一直转圈,JS阻塞,因为JS有可能会修改页面的道路数,所以加载JS时候要等JS下载完毕,并执行完毕,才能继续往下加载。...它会问浏览器,你告诉这个页面保存修改时间是这个,你告诉没有改,浏览器就告诉它,兄弟这个页面没有改过,你直接使用本地缓存就可以。...第二种缓存协商方式打标签,一个页面频繁最后修改时间变动,但是内容没有变,页面是每次重新生成,但是页面内容并没有变。...强制刷新,ctrl+F5强制刷新,浏览器这时候就会发起一个全新请求,不会使用任何缓存,所以我之前看到很多前端开发人员不会使用刷新觉得好尴尬,点了半天不起作用。...后来所有东西都是不一定,一定要看你需求。 更有甚者群里问,班长支撑千万PV是什么架构?“不一定”。这就很难说了,这一定要看需求,你说一个小型网站,就一个Http页面,支持几十亿PV都没有问题。

1.6K80

微信小程序 onLoad与onShow之间传值「建议收藏」

大家好,又见面了,是你们朋友全栈君。 写一个页面刷新效果, 需求是页面第一次进来时,做出一次数据加载,之后页面有个评论操作,每次评论成功都将本页数据进行刷新。...因为函数加载评论数据时候,需要一个bookid数值,传参到服务器这样才能获取相对应数据。...但是页面刚进行加载时候,data中数据是没有的,也就是说不能通过onLoad()将 data中数据进行更新,然后onShow()中进行调用。...页面刚进入时候,执行onLoad,onLoad中调用onShow。这个时候页面数据被加载好。然后页面正常调用onShow,此时因为没有参数,所以此次onShow会无法得到有效结果。...突然发现犯了个傻吊错误,onShow里面的内容可以直接重新写一个函数封装起来啊,然后直接在onLoad里面调用,之后刷新也直接调用就好了。为什么要多次一举写在onShow里面呢???哭辽。

1.4K10

你真的了解 Web 缓存体系吗?

当遇到加载JS会阻塞,你会看到一个页面一直转圈,JS阻塞,因为JS有可能会修改页面的道路数,所以加载JS时候要等JS下载完毕,并执行完毕,才能继续往下加载。...它会问浏览器,你告诉这个页面保存修改时间是这个,你告诉没有改,浏览器就告诉它,兄弟这个页面没有改过,你直接使用本地缓存就可以。...4.2.2 基于Etag缓存协议 第二种缓存协商方式打标签,一个页面频繁最后修改时间变动,但是内容没有变,页面是每次重新生成,但是页面内容并没有变。...强制刷新,ctrl+F5强制刷新,浏览器这时候就会发起一个全新请求,不会使用任何缓存,所以我之前看到很多前端开发人员不会使用刷新觉得好尴尬,点了半天不起作用。...后来所有东西都是不一定,一定要看你需求。 更有甚者群里问,班长支撑千万PV是什么架构?“不一定”。这就很难说了,这一定要看需求,你说一个小型网站,就一个Http页面,支持几十亿PV都没有问题。

1.3K10

vue页面刷新_vue强制重置组件

vue页面刷新 首先我们都知道vue属于单页面应用,默认境况下是不会触发刷新页面操作,所以这个时候就需要我们通过事件来触发reload()来达到刷新操作 接下来就为大家介绍三种刷新页面的方法 1... 这里来说明一下,我们主体思路,想可以通过视图显隐来达到我们想要刷新,所以我们就在这里声明了一个方法,先让视图消失随后又出现,这种方法有什么好处呢,你可以刷新局部页面,也可以刷新全部页面...可以看到,当我们点击刷新时候我们页面就会触发一次事件,刷新一次,可这并不是我们想要,我们想要是当一进入页面,就要触发一次刷新,那干脆我们执行这个事件函数放在mounted里面好了,话不多说直接开始...,刷新次数无限飙升,还没有两秒,刷新次数已经达到了上万次,你试想一下,如果你有后台,不断地刷新,向后台发送请求,就这每秒请求频率,不把你服务器搞崩才怪,那为什么会陷入死循环呢,很简单,你刚加载页面的时候他触发一次刷新...,刷新之后是不是又会重新加载一下页面呢,然后再触发,加载…无穷无尽 那就没有办法解决嘛,有,既然我们找到了原因,那解决办法也是有的 解决思路:通过判断来处理第一次刷新后,后续将不再执行,也就是我们第一次执行时候为

2.3K10

setTimeout和requestAnimationFrame

如图所示,尽管255ms处添加了定时器代码,但这时候还不能执行,因为onclick事件处理程序仍在运行。定时器代码最早能执行时机是300ms处,即onclick事件处理程序结束之后。...setInterval存在一些问题: 定时器代码可能在代码再次被添加到队列之前没有完成执行,结果导致定时器代码连续运行好几次,而之间没有任何停顿。...requestAnimationFrame 60fps与设备刷新率 目前大多数设备屏幕刷新率为60次/秒,如果在页面中有一个动画或者渐变效果,或者用户正在滚动页面,那么浏览器渲染动画或页面的每一帧速率也需要跟设备屏幕刷新率保持一致...跳帧: 假如动画切换 16ms, 32ms, 48ms时分别切换,跳帧就是假如到了32ms,其他任务还未执行完成,没有执行动画切帧,等到开始进行动画切帧,已经到了该执行48ms切帧。...此外,使用这个API,一旦页面不处于浏览器的当前标签,就会自动停止刷新。这就节省了CPU、GPU和电力。 requestAnimationFrame是主线程上完成。

1.7K20

认识高性能Web缓存体系,你需要知道这些

CDN与反向代理缓存 CDN缓存体系 看了一下所谓浏览器之间关于网络数据缓存,可能也就是ARP解析缓存,其他Cache数据应该没有,数据只有Buffer。 为什么有Buffer?...单独截取了几个Nginx反向代理缓存,这个目录就可以通过挂载tmpfs来做,就不用写硬盘了。当然还有缓存刷新,一般CDN会提供缓存刷新芯片,你可以批量把你过期资源全部刷新一遍,这是一种方式。...其实还有一个小细节,你会发现我们再打开京东页面,这些静态资源和主站,是不同顶级域名下,大家知道为什么不同顶级域名下面吗?...首先会检测OpCache,操作码缓存有没有,如果有直接执行。如果没有解析,编译成中间码,然后保存到共享内存里,然后再执行。这样的话,下一次再执行PHP脚本时候,就会有缓存了。...这个缓存开还是不开是RAID卡控制,默认是关闭之前用戴尔系列服务器,默认是关闭服务器上默认磁盘缓存是关闭,只用RAID卡缓存,这才多大,还是RAID卡大。

1.4K70

Vite 在运行过程中是如何发现新增依赖

,count 会被重置 {{ count }} 当我们取消注释,即新引入 vue-router 依赖时(之前没有被使用过),会发现页面刷新了,...这里只是用了一种比较简单引入依赖方法,实际上这样引入没有任何意义,仅用于演示。 这里有几个问题,放到后面解答: 1. 引入 vue-router 之后,发生了什么? 2. 为什么页面刷新?...Vite 重新编译所有依赖,编译完成后 Vite 会通知页面进行刷新 3. 浏览器刷新页面 4. Vite 此时已经构建好 vue-router,因此能够正常返回内容 为什么构建后需要刷新页面?...答案是不会,因为 Vite 只会在发现新依赖时候重新执行构建,那没有发现新依赖,自然就没有接下来发生重新构建和刷新页面了。 总结 本文用简单在线例子,来说明 Vite 发现新依赖后行为。...Vite 发现该依赖没有被预构建,认为是新依赖,重新执行预构建,并通知浏览器刷新 引用链接 [1] 《快速理解 Vite 依赖预构建》: https://zhuanlan.zhihu.com/p/561139849

1K10

写给初学者Jetpack Compose教程,为什么要学习Compose?

因此,正式开始写这个系列文章之前觉得有必要先写一篇序章,我们真的就来纯粹地聊一聊,到底为什么要学习Jetpack Compose?...记得应该是很早阶段就对Jetpack Compose进行了尝鲜,但当时体验下来结果让直摇头。...有不少朋友可能在之前就已经或多或少了解过Compose,也有读者朋友也跟我反馈过,并不喜欢Compose这种声明式写法,以前View用得好好为什么Google还要再发明一个新UI框架来替代View...这种就是过程式思维。 那这种编程思维有什么不好吗?好不好其实都是对比出来没有声明式之前没有觉得这种过程式思维有什么问题,待会我们会看具体比较示例。 那声明式思维又是什么样呢?...事实上,所有的声明式UI框架在这里都会采取相似的优化策略,那就是刷新界面的时候只会去更新那些状态有变化控件,而那些状态没有变化控件界面刷新时候则会跳过执行

46420
领券