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

Jetpack Compose · 快照系统

在 Compose 中我们通过 state 的变化来触发重组,那么请思考以下几个问题: 为什么 state 变化能触发重组呢? 它是如何确定重组范围呢? 只要 state 变化就一定会重组吗?...所以这里只是演示快照的使用(不涉及底层实现),这样有助于理解Compose重组的机制。 Snapshot(快照),简单比喻就是给所有 state 拍了个照,因此你能获取到拍摄之前的状态。...对于快照系统,被观察者就是我们的 state,而观察者有两个,一个是读取观察者,一个是写入观察者。...答案是不会,因为在 kotlin 中如果把变量不放到类里,直接放到文件顶层。编译之后其实会生成一个文件,而这个属性则变成 static 的。...: 只有主动请求一个类,这个类才会初始化,仅包含静态变量,函数,等静态的东西.

1.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    精读《设计模式 - Observer 观察者模式》

    对象与视图双向绑定 在 精读《设计模式 - Proxy 代理模式》 中我们也提到了双向绑定概念,只不过代理是实现双向绑定的一个具体方案,而观察者模式才是在描述双向绑定这个概念。...拍卖 拍卖由一个拍卖员与多为拍卖者组成。拍卖时,由 A 同学喊出的竞价(我出 100)就是观察者向目标发出的 setState 同时,此时拍卖员喊出(有人出价 100,还有更高的吗?)...意图解释 数据与 UI 的例子已经详细说明了其意图含义,这里就不赘述了。 结构图 Subject: 目标,即例子中的 “数据”。 Observer: 观察者,即例子中的 “表格”、“柱状图”。...为了更好的理解,以这张协作图为例: aConcreteSubject: 对应例子中的数据。 aConcreteObserver: 对应例子中的表格。...使用设计模式切记不要死板,理解原理就行了,在不同平台有不同的更加优雅的实现方式。

    44530

    HTML5设计原理(中)

    它要告诉浏览器的是:这个文档是XHTML 1.0的文档。那么在HTML 5中,省掉不必要的复杂性,doctype就简化成了: 仅此而已。好了,就连我也能过目不忘了。...HTML5所体现的不是“噢,给作者一个简短好记的doctype不好吗?”,没错,简短好记是很好,但如果这个好记的doctype无法适应现有的浏览器,还不如把它忘了更好。...因此,这个平衡把握得非常好,不仅理论上看是个好主意——简短好记的doctype,而且实践中同样也是个好主意——仍然可以触发标准模式。应该说,Doctype是一个非常典型的例子。...只有我这样想吗?还有别人吗? 但是,HTML5必须支持已经存在的内容,而已有的内容就是这个样子的。不是吗?根据伯斯塔尔法则,浏览器没有别的选择。 有人可能会说“这样不行。...此时,根据上下文不同,这个独立部分中的H1,在整个页面中没准会扮演H2或H3的角色——取决于它在文档中出现的位置。面对这个突如其来的变化,也许有人的脑子会暂时转不过弯来。

    1.7K10

    IQ1: 怎么定义图像的质量?如何评价图像的质量?

    一、图像质量的定义 我的这个专栏叫做图像质量评价,但是什么叫做图像的质量呢? 图像质量是一个非常宽泛的概念,在不同情况下有不同的理解。...那这张照片的质量高吗? ? 因此,在进行图像质量的评价之前,我们需要首先仔细定义 “图像质量”的含义。这肯定取决于产生图像的用途,以及图像的观察者。...2.4 深度 逼真的成像应该使人们更容易分辨场景中各个物体的远近,例如下面这个例子中,下图比上图更加容易让人们感知到物体的远近: ?...2.5 亮度范围 高质量的图像应该能表现出场景中尽可能大的亮度范围。如果相机对场景的曝光不足,与场景的理想表现或观察者回忆的内容相比,图像看起来会太暗;。在最坏的情况下,黑暗场景的内容将难以辨认。...相反,如果相机的场景曝光太高,图像看起来太亮了,最坏的时候会完全褪色。这个图像属性通常是人们所说的动态范围。图像的动态范围越低,图像在场景中呈现的亮度范围就越受限制,下面就是一个典型的例子: ? ‍

    3K41

    谷歌是怎么设计AI语音界面的?这里总结了对话设计六大原则

    用户:哦,一个小时左右 VUI:最后,我只需要记录一个简短的标题 用户:性能评估 VUI:搞定!让我重复一遍:8月2日1点,持续一小时,我记得对吗? 用户:对 VUI:赞!...就像第一个例子,按说应该是没有形象设计的VUI,却在「友善、乐于助人」等性格属性上评价不高,在「无聊」上的得分却很高。...你还需要意识到,业界所谓的「识别错误」实际的根源在于:人类乐于(在对话中)提供更多的信息,推动交流。 简短、有效 语音与文字不同,语音是伴随着时间流动的。时间越长,听者就越难理解。...这个VUI保持简短、扼要并提供了更自然、愉悦的交互。 与书面文字的永久性相反,语音是短暂的,转瞬即逝的,且语音的传达方式是线性的。在VUI设计中,不相关的信息尤其令人反感。...在你刚刚听到的例子中,「30天」是新信息,所以它应该出现在最后并有适当的重音。在听起来很奇怪的版本中,旧信息「六月」错误地扮演了新信息的角色。

    95930

    Android 面试必备 - 知识图谱

    相关文章 观察者设计模式 Vs 事件委托(java) java 代理模式详解 装饰者模式及其应用 建造者模式(Builder)及其应用 ---- 写给技术人员的几句话 编程一定要动手实践 平时,我们在阅读博客的时候...归根结底,是因为你根本没有掌握这个知识点,可能连点皮毛也不懂。 当然,我不是说,每一个知识点你都要非常熟悉。对于那些经常用到的知识点,你至少要熟练掌握。...但你能保证十天,一个月,一年之后,你还记得住吗? 做笔记的难得之处,是你的思考过程。当你着手记笔记的时候,你的大脑在思考,我要怎样用简短通俗的语言记录下来。这在无形之中加深了你的印象。...一段时间后,即使你忘记了,但当你回看以前的笔记的时候,我们往往会吸收地很快。 当然,我也不赞同一味地死记硬背。生活中的琐事那么多,不可能事事都记录下来。挑选那些你觉得重要的,有感触的即可。...就那我这两三年写博客的例子来说吧,两年前在做一些 UI 特效的时候,将相关的原理都搞明白了。我以为我至少可以记忆个两三年吧。

    1.3K20

    爬太山龙泉寺的感悟:程序员究竟是不是青春饭?

    今天是假期结束后的第一天上班,上午例行开完小会之后,就开始了一天的摸鱼。这个假期,有人忙着出去旅游,也有人忙着为自己之后的工作方向做选择。...爬到山顶上,大部分时间是在登高望远,放空自己,或者说是发呆想事。期间微信上有个朋友给我留言咨询,「土哥,你好,我是一名26岁的女生,想从事前端开发,现在还来得及吗?」...我看见这条消息之后,便简短地回复了一下:只要你热爱它,一切都来得急。 回复完之后,她又发来一条消息:「可IT行业,尤其是程序员,不是青春饭吗?」...这个问题,我没办法再简短回复了,于是手敲了很多文字,与她攀谈起来,同时借着这个话题,与大家分享下我的想法。 程序员是不是青春饭,看你怎么理解。...向我提问的这个女生才26岁,离30多岁起码还有将近5年多的时间,如果想从事这个行业,真的热爱它,那就活在当下,先入行再说,而不是站在门口张望,道听途说。 入一行,先别惦记着能赚钱,先学着让自己值钱。

    58350

    简易理解设计模式之:观察者模式——监听与回调

    介绍: 观察者模式属于行为型模式。它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。...例子: 此模式的使用实在太多了,在iOS中的KVC、KVO模式,Android中的BroadCast、View.OnClickListener相信大家已经用过无数遍了。...在测试类中,我们模拟控件被执行时调用view.performClick()方法,就会通过回调注册的OnClickListener观察者的onClick方法会来通知观察者,所以回调就是一种观察者模式的具体的实现方式...简易理解设计模式之:组合模式——实现View中的树状结构 简易理解设计模式之:装饰模式——穿衣服经典案例 简易理解设计模式之:外观模式——第三方SDK的帮助类 简易理解设计模式之:享元模式——五子棋游戏例子...简易理解设计模式之:命令模式——实现命令的参数化配置 简易理解设计模式之:责任链模式——OA中请假流程示例 简易理解设计模式之:中介者模式——多人聊天室例子 简易理解设计模式之:解释器模式——

    75220

    RxJava 详解

    在这个例子里,警察是观察者,小偷是被观察者,警察需要时刻盯着小偷的一举一动,才能保证不会漏过任何瞬间。...在一个正确运行的事件序列中,onCompleted()和onError()有且只有一个,并且是事件序列中的最后一个。...在 RxJava 的默认规则中,事件的发出和消费都是在同一个线程的。也就是说,如果只用上面的方法,实现出来的只是一个同步的观察者模式。...而且subscribe()不是最外层直接调用的方法吗,它竟然也能被指定线程?)。然而 Scheduler 的原理需要放在后面讲,因为它的原理是以下一节《变换》的原理作为基础的。...因为observeOn()指定的是Subscriber的线程,而这个Subscriber并不是(严格说应该为『不一定是』,但这里不妨理解为『不是』)subscribe()参数中的Subscriber,而是

    1.8K10

    提问的智慧

    在哪里来的无从考究~~~   ---------------------------------   在黑客世界里,当提出一个技术问题时,你能得到怎样的回答?...另一方面,表明你愿意在找答案的过程中做点什么,是一个非常好的开端。   “谁能给点提示?”、“我这个例子里缺了什么?”以及“我应该检查什么地方?”比“请把确切的过程贴出来”更容易得到答复。...别用喋喋不休的“帮帮忙”(更别说“救命啊!!!!!”这样让人反感的话)来浪费这个机会。不要妄想用你的痛苦程度来打动我们,   别用空格代替问题的描述,哪怕是极其简短的描述。   ...谨慎明确的描述症状。   2. 提供问题发生的环境(机器配置、操作系统、应用程序以及别的什么)。   3. 说明你在提问前是怎样去研究和理解这个问题的。   4....还有人不会用Google吗?

    33710

    vue的双向绑定原理_vue的双向绑定原理及实现

    下面给两个比较好的例子 观察者模式:观察者(Observer)直接订阅(Subscribe)主题(Subject),而当主题被激活的时候,会触发(Fire Event)观察者里的事件(用网上比较好的例子...,去触发用到该主题(属性)的地方更新 至于什么时候收集到依赖,我个人理解是解析html文档的时候,遇到需要收集的变量,会在bindWatcherAndDep这里实例化一个watcher实例,在实例化的过程中...,不是在构造函数上有this.triggerDepCollection()吗?...下面给两个比较好的例子 观察者模式:观察者(Observer)直接订阅(Subscribe)主题(Subject),而当主题被激活的时候,会触发(Fire Event)观察者里的事件(用网上比较好的例子...,去触发用到该主题(属性)的地方更新 至于什么时候收集到依赖,我个人理解是解析html文档的时候,遇到需要收集的变量,会在bindWatcherAndDep这里实例化一个watcher实例,在实例化的过程中

    94360

    『设计模式』80年代的人们就已经领悟了设计模式-- 发布者订阅者模式 (包括发布者订阅者模式和观察者模式的区别)

    举个报纸的例子: 还是得说一下报纸,有人说报纸不就是观察者模式,那得有多少观察者和主题?一张报纸那么多板块,订报纸的人那么多,难道要一个人一个人的通知,显然不现实。...如果在记者(编辑)和读者之间加了一个载体报纸,那么这还是观察者模式吗?...我们放几张图,方便理解: 总结出的差异 在观察者模式中,观察者知道主题,主题也维护观察者的记录。而在发布者/订阅者中,发布者和订阅者不需要彼此了解。...他们只是在消息队列或代理的帮助下进行通信。 在发布者/订阅者模式中,与观察者模式相反,组件是松散耦合的。 观察者模式大多数是以同步方式实现的,即,当某个事件发生时,主题调用其所有观察者的适当方法。...家境贫寒,总得向这个世界低头,所以我一直在奋斗,想改变我的命运给亲人好的生活,希望同样被生活绑架的你可以通过自己的努力改变现状,深知成年人的世界里没有容易二字。

    64220

    和 lvgo 一起学设计模式(十五)行为型之观察者模式

    被观察者发生改变时,通知给每个观察者,这就是观察者模式。放到生活中的例子就是 天气预报的短信通知,在很早以前,我们的天气预报服务可以通过短信的信息订阅。...在这个业务场景中,天气预报就是被观察者,每个付费的用户就是观察者,当有最新的天气预报的消息时,会以短信的形式通知给曾经付过费订阅的用户。如果不订阅是不会收到的。...你现在在使用的通讯软件中的’群聊’功能,这个相对较为复杂一点,可以抽象的理解一下,用一个人去理解,群里的每个人都是被观察者,每个人都是观察者。...当一个人发出消息的时候,所有在群里的人都会收到消息也包括自己。反之,不在群里的人则收不到。 还记得小区单元门口一个一个小盒子吗?有的小盒子里是有当天的报纸的。...甚至里面的报纸内容可能是不相同的,这里就涉及到了多个被观察者和观察之间的关系,这个小盒子能收到自己订阅的报社报纸,当然你可以同时订阅多个,这样你就可以收到多个报社送过来的报纸了。

    30620

    通过编辑器创建可视化Kubernetes网络策略

    在过去的几年里,当我们与你们中的许多人一起在Cilium社区中执行Kubernetes网络策略时,我们已经了解了许多关于网络策略挑战的知识。...教程:遵循辅助教程,从还没有使用网络策略到一个良好的安全态势。 互动创建:以辅助和互动的方式创建策略。 可视化和更新:上传现有的策略,以验证和更好地理解它们。...在每个错误的背后,你会在工具中找到一个简短(3-5分钟)的教程链接,引导你完成修复错误所需的每个步骤。...一个常见的错误可能是使用podSelector创建一个入口规则,如当前策略所示。然而,正如您在可视化中看到的,这个网络策略只允许从默认名称空间的app=prometheus输入流量。...我们将用最后一个例子作为一个小测验。这两个看起来相似的网络策略规则都利用了{},它们之间的区别是什么?猜测一下,然后在下面的网络策略编辑器中查看每条规则,看看您是否正确。

    1.4K40

    时空谜题:B. 时间、空间、爱因斯坦火车实验

    质能方程E=MC^2中,质量和能量这两个曾经被认为毫不相干的事物被爱因斯坦联系在一起,于是我们知道了质量可以转化能量,并做了很多成功的实验。但质能转化也许只是这个方程的表面,并非这个方程的本质。...其次,这个方程和我们要讨论时间和空间的关系在于,忽略了方程中的另外两个概念——时间和空间;还用了“速度”这个概念,但是理解和使用有误。速度的本质其实是时间和空间的转化,空间的变化程度就是时间。...有人说,那我不动行不行?不行,你不动地球也在动,地球不动,银河系也在动......除非你可以让自己绝对静止或者整个宇宙都不动——全宇宙都静止了,时间也就停止了。近几十年来,不断有人在讲类似假说。...所以,在第一个静止的观察者看来是同时发生的闪电,运动中的第二观察者却看到东方的闪电先亮而西方的闪电后亮。...由此,我们不能得到这样的结论:在铁轨旁的第一个观察者看来是同时发生的两件事,而在火车上的第二个观察者看来却并不是同时发生的。显然,同时性只能是相对的。

    1.4K20

    Redisson 分布式锁实现之前置篇 → Redis 的发布订阅 与 Lua

    当我们取消订阅了,它就不会再向我们推送这篇文章了;只要这个公众号一直在运行,就会一直有人订阅它或者取消订阅   可以将发布/订阅理解成分布式版的观察者模式,关于观察者模式,大家可以查看:设计模式之观察者模式...PSUBSCRIBE   按照模式订阅,可以理解成正则匹配订阅   subscribe 只能订阅一个或多个具体的频道,不能按正则匹配订阅,而此命令正好弥补这个空缺   基本语法: psubscribe...PUNSUBSCRIBE   按照模式取消订阅,可以理解成正则匹配取消订阅   unsubscribe 只能对一个或多个具体的频道取消订阅,不能按正则匹配来取消订阅,而此命令正好弥补这个空缺   基本语法...,不在五行之中,不能通过其中的某个命令直接实现   有人可能就会说了:一个命令不行,那就多个命令组合实现嘛   但是,我们需要考虑到:多个命令组合能保证原子性吗,如果有逻辑处理又该怎么办?   ...发布订阅模式可以类比观察者模式,便于理解     涉及 4 个角色,理清楚它们各自的作用就好理解了   2、Lua 在 Redis 中非常灵活,相当于给我们留了一个自定义命令的接口   3、Redis

    1.7K10

    想靠狂看JS教程来快速提高前端水平?90%的人都选错了方向...

    肯定有人能。 你能不能?不好说。 为啥? 因为许多概念、思想,需要通过时间去反正练习,不断积累才能理解。量,到了;质,才能变。只是不断看用眼睛看各种教程,而不动手去练,是不会有效果的。...-- 老尚你胡说 --> 就上面那个学英语的例子,“我”是背十本英语书,不是买。 --问题是,你真能背得下十本英语书吗? 我哪胡说了? 前端教程千千万,但你仔细看看,里面的内容80%都是重复的。...然后咱们也有了牛逼闪闪的鱼雷。 上面那个例子里,技术在什么地方?在鱼雷里。鱼雷是什么?是一个“成型的产品”。 咱们怎么学会的?拆开自己研究的。这叫什么,看源码! 握草,老尚你还说不是标题党。...例如,jq的核心思想是单例、工厂模式;vue,react的核心思想是观察者、MVVM模式。 无论什么框架,它都是一个由简到繁,版本号由低到高,方法、功能由少到多的过程。...在这个过程中,它的代码会由少到多。 所以读源码,最好找到它的早期版本,比较好读一些。因为早期的时候代码量少,思想和功能表现的比较直接,而框架的主干的思想,一般是不会变的。 <!

    1.4K71

    Web内容的无障碍性(1):概述为什么Accessibility无障碍如此重要

    它的作用就是方便任何人可以精准的找到键盘字母的位置,从而可以在不看键盘的情况下,快速的打字,俗称“盲打”,大家都知道它的含义,没有人会把这个词理解为“盲人打字”吧。...合规等级分为三级(A、AA 和 AAA)一些海外的项目,在需求的实现过程中,客户对应用的无障碍性都会有一定的要求。...理解WCAG 2.0- 理解和实施WCAG 2.0的指南。对于WCAG 2.0的每一个准则和成功标准,这些主要议题都有一个简短的“理解”文档。...如果你在一个互联网公司工作,你大可在周边一问,比如:你听说过Web Accessibility?或者你知道怎么做才是最佳的方式吗?我们的产品里面有做这个?会作为代码和质量审核的一部分吗?...其实这是个如何去做的话题会比较大,但是我想在这里举几个简单例子,让大家产生一些共鸣,也许从明天开始,在写代码和设计的过程中,你就会注意这些小的细节。

    87210

    SRE生存之道:如何写事后回顾报告

    这意味着无论谁打开这个文档,他们都应该对发生了什么、何时发生的,以及谁受到影响有一个大致的了解。它往往是简短的,给读者一个关于事故的“快照”。 一个例子如下。...[服务中断结束] 这个时间线非常简短,但是它有几个优点。首先,它说明了事故是何时开始和结束的。它显示了谁对事故做出反应并执行了行动,因此如果需要的话,这些人可以提供更多细节方面的信息。...一个关于根本原因的例子。 所做的配置更改触发了边缘路由代码中的未知错误。在路由代码中,假设在配置的路径中只允许使用ASCII字符。...类似这种有多达40个行动项的事后回顾报告,没有人会感兴趣,所以是无用的。之所以说没有人去实现的行动项是无用的,还因为它们暗示了SRE工程师(或任何正在推动事后回顾报告的人)在公司里的重要程度不高。...但另一方面,也许中断会在最大的活动期间发生,这对公司来说是很大的损失。 有人说,没有行动项,事后回顾报告就没有存在的意义。在一个资金雄厚的组织中,我是认同这个观点的。如果你有很多资源,行动项很重要。

    1.3K20
    领券