首页
学习
活动
专区
圈层
工具
发布

《Android Studio开发实战 从零基础到App上线》本书内容问题答疑

4、关于第2章的跑马灯文字滚动逻辑 问题:为什么跑马灯不是点一次停,再点一次动;而是点一次停,需要点两次才动?...tv_marquee.setFocusable(false); tv_marquee.setFocusableInTouchMode(false); 该分支取消文本视图的焦点,所以停止滚动了(只有在获得焦点的时候才能滚动...在android studio中选中drawable目录下的图片,然后右击在右键菜单中选择下面的“Create 9-Patch files”,在弹出的对话框中点击“OK”按钮。...即使你在设置中开启存储权限,重启app也看不到购物车商品图片,这是因为代码有判断SharedPreferences保存的first数值,如果不是首次运行则不进行图片加载操作。...4)Android7.0以上手机无法正常进行AES加解密,原因是Android7.0开始去掉了Crypto provider,需要开发者自己定义一个如下的CryptoProvider类: public

1.5K30

Android6.0源码分析之录音功能(一)

Android源码录音功能说起来似乎也很简单,只不过就是一个录音的功能然后进行了一个保存的操作。为什么要研究这个呢?...,aac,wav 7>,显示录音文件列表 其实总的来说也就是录音然后以某种格式保存的功能,只是在录音的过程中需要根据不同情况对UI进行一个更新。...也就是说在录音按钮时如果想要开启录音首先要经过两次判断 第一是判断是否是中止状态,也就是说录音中止此时点击会继续录音。...在录音的过程中,如果发生了暂停或者继续,要做的除了调用接口 方法进行暂停或者继续的操作,还有就是对录音的时长需要进行一个计算,以及录音的状态进行一个设置。...至于中止和继续录音,系统应用有可以使用的方法,但是不供三方应用使用,所以需要自己实现,其中涉及到编解码的问题,下篇再续!!! 文章到此,基本上录音按钮的功能就分析完毕了。

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

    react面试题

    在代码中调用setState函数之后,React 会将传入的参数对象与组件当前的状态合并,然后触发所谓的调和过程(Reconciliation)。...在差异计算算法中,React 能够相对精确地知道哪些位置发生了改变以及应该如何改变,这就保证了按需更新,而不是全部重新渲染。 扩展1: setState的第一个参数除了对象,还能传什么?...我们可以为元素添加ref属性然后在回调函数中接受该元素在 DOM 树中的句柄....react会进行报错提示 性能下降 key值相同的情况有可能会造成数据更新时,数据的错乱 如下为react在源码中对key的比较,如果不同则会直接更新 // 用来判定两个element需不需要更新 //...在新版本的react中, 使用React.createContext进行创建context对象.其会返回Provider(提供数据的父组件)以及Consumer(消费数据的子组件)两个对象进行使用,react-redux

    84520

    浅谈前端的状态管理(下)

    尽管在 Redux 里还是没办法做到一切都是确定的(如异步)但是应该保证大多数部分都是确定的包括: 视图的渲染是可确定的 状态的重建是可确定的 至于为什么要这么做,上一篇我已有提及。...我们知道在 Vue 中有提供 keep-alive 让我们缓存当前组件,这样就可以解决上述的场景。 但是很遗憾在 React 中并没有像 Vue 一样的 keep-alive。...假设你使用的技术栈是(react + antd),来手写一个简单粗暴的(核心是利用context来进行跨组件数据传递): // KeepAlive.js export default function...Provider> } } 至于为什么不直接使用 context,而多封装一层 keepAlive,是为了统一处理 context,在组件头部中使用装饰器这种简洁的写法...,简单说一下,需要先配置以下 babel 放可使用哦~ npm install -D @babel/plugin-proposal-decorators 在jsconfig.json中(无则新建)配置一下

    1.1K20

    如何更好地使用笔记本的触控板(Touchpad)

    如何更好地使用笔记本的触控板(Touchpad)? 1. 轻敲即可代替按钮 在Touchpad上轻敲如同按鼠标左按钮,轻敲通常比单按按钮更方便、更容易,轻敲两次如同按钮两次。...不用按钮而实行拖放 您经常需要按住鼠标按钮来移动游标 (例如, 在荧幕中移动图示或视窗),这个动作被称为拖放,当您使用Touchpad 时,您可不用按钮而进行拖放。...若要实行拖放,轻敲两次(即:下-上-下); 第二次轻敲后将您的手指放在 Touchpad 上。(一些人称这个动作为轻敲一次半)。...您就会一直处于拖放状态中 (好似按住鼠标左按钮),直到您的手指离开Touchpad,拖放才会停止。 3....实现滚动功能 在Windows中,一但您安装了鼠标触控板的驱动程序,当您要在各种窗口中拖动水平或垂直的滚动条时,只需要用手指在鼠标触控板的底边和右边移动即可拖动相应的滚动条。

    1.5K10

    React 性能优化完全指南,将自己这几年的心血总结成这篇!

    ,在不使用 key 时,组件两次 Render 的结果如下。 在开发过程中,遇到接口返回的是所有数据时,需提前预防这类 bug,使用虚拟列表优化。 跳过回调函数改变触发的 Render 过程 React 组件的 Props 可以分为两类。...一般在提交阶段的钩子中更新组件状态的场景有: 计算并更新组件的派生状态(Derived State)。...使用上面两种方式后,React 会将新状态和派生状态在一次更新内完成。 根据 DOM 信息,修改组件状态。...在该场景中,除非想办法不依赖 DOM 信息,否则两次更新过程是少不了的,就只能用其他优化技巧了。 use-swr 的源码[43]就使用了该优化技巧。

    8.9K30

    Flutter | 数据共享

    build 方法中使用了 ShareDataWidget 的数据,同时在回调中打印了日志 最后,创建一个按钮,点击一次,就让 ShareDataWidget 的值自增 class TestInheritedWidget...:状态持有方:进行状态更新,发布状态和使用的;状态使用方(观察者) ,监听状态的改变事件来完成一些操作; 但是,通过观察者模式来实现跨组件有一些明显的缺点: 必须显式的定义各种事件,不方便管理 订阅者必须显式的注册状态改变回调...,利用这个特性,我们可以将需要跨组件的状态保存在 InheritedWidget 中,然后在子组件中引用 InheritedWidget 即可。...我们可以发现使用 Provider,将会带来如下好处: 1,我们的业务代码更加的关注数据,只需要更新 Model,则 UI 会自动更新,而不用在状态改变后在去手动调用 setState 来显式的更新页面...2,数据改变的消息传递被屏蔽了,我们无需手动去处理改变事件的发布和订阅了,这一切都被封装在 Provider 中了,这帮我们省掉了大量的工作 3,在大型复杂的应用中,尤其是需要全局共享的状态非常多的时候

    1.6K30

    创造无限可能 | 在 Android 12 中使用 widget

    用户可重新设置原有 widget 可重组的 widget 允许用户对 widget 进行自定义设置。在 Android 12 中,用户将无需通过删除和重新添加 widget 来调整这些原有设定。...要使用这一功能,您需在 appwidget-provider 中把 widgetFeatures 属性设置为 reconfigurable。...在这个用例中,我们希望用户能够在两种不同的 widget 布局之间进行选择,即 Grocery List 和 To-Do List。...由于我们把配置活动添加至 appwidget-provider 的 configure 属性中,用户长按 widget 并点击编辑/重新设置按钮时,配置就会生效。...现在您已经在这篇文章中了解到可配置的、新的或是改进中的 API,请查阅我们之前的推文《更新您的 widget 以适配 Android 12》,了解更新 widget 设计以及在 widget picker

    1.8K20

    探究React的渲染

    因此提醒的状态是clean。 再次点击按钮,因为之前的按钮点击触发了重新渲染,并创建了一个新的快照,其状态为dirty,在最初的点击之后的任何点击中,我们都会得到dirty。...同样,只有当事件处理程序包含对useState的状态更新函数的调用,并且React看到新的状态与快照中的状态不同,React才会重新渲染。 下面的代码,按钮被点击后count的值是多少?...当按钮被点击,计数器组件会重新渲染多少次?直觉可能是,React会对它遇到的每个更新器函数进行重新渲染,所以在例子中是3次。...相反,React只会在考虑到事件处理程序中的每个更新函数并确定最终状态后才会重新渲染。所以在我们的例子中,React每次点击只重新渲染一次。 React如何计算状态更新的?答案是分批处理。...但有一种方法可以告诉React使用更新器函数的前一次调用的值,而不是替换它。要做到这一点,你要传递给更新函数一个函数,该函数将接收最近一次调用的值作为其参数。

    78130

    微服务架构下请求调用失败的解决方案

    所以必须要针对服务调用失败进行特殊处理。 1 超时 微服务化后,一次用户调用可能会被拆分成多系统间的服务调用,任何一次服务调用若发生问题都可能导致用户请求最终是失败的。...但超时时间的设定也需考量: 太短,可能有些服务调用还没有来得及执行完,就被丢弃 太长,可能导致服务消费者被拖垮 因此,需根据正常情况下,服务提供者的服务水平来决定。...经验之谈,最大重试比例可设置成15%: 能尽量体现备份请求的优势 不会给服务提供者额外增加太大的压力 4 熔断 前面的手段在服务Provider偶发异常时很有效,但若Provider故障,短时间内都无法恢复...4.1 熔断原理 把客户端的每次服务调用,通过断路器封装,使用断路器来监控每一次服务调用。...Provider发起请求 Half Open状态:断路器开启后,每隔一段时间,会进入半打开状态,会向Provider发起探测性的调用,以确定Provider是否恢复。

    1.2K30

    使用Provider前你应了解Consumer

    目的有2: 其一:当没有BuildContext时可以使用Consumer @override // ERROR:ProviderNotFoundError 因为该context中并没有Provider...众所周知,每个Widget都有属于自己的元素Element,在该Element进行mount的时候回将自身化作美丽的天使(Context)传入组件或State的build方法中来供你使用。...但按钮还没缓过神 会走到buildScope,脏表数为1, _MaterialInterior(duration: 200ms, 再放行,按钮更新,一次界面的点击刷新完成。...只要四个块,为什么有5个? 百思不得其解,最后一句TMD,按钮上也加了Consumer,被自己蠢死。 众所周知,Flutter只会绘制重建脏表里的元素。...在rebuild一波后脏表加入的是整个Widget的元素。 ? 就这样,所以层次较深时,推荐使用Consumer来将更新的粒度变小。

    3.1K30

    React生命周期简单分析

    组件中, 点击按钮, 调用父元素中的的onAgeChange函数, 但是在父元素中这里我们setState的修改后的age和修改之前prevState中age状态值是一样的,age都是18, 所以App...因此即使渲染了两次, 用户也不会看到中间状态, 即不会有那种状态突然跳一下的情况发生....在初始化渲染的时候该方法不会被调用, 在render方法之前. 使用该方法做一些更新之前的准备工作, 例如读取当前某个 DOM 元素的状态并在componentDidUpdate中进行处理....如果需要更新 state 来响应某个prop的改变, 请使用getDerivedStateFromProps 3.关于在组件更新之前读取DOM元素的状态, React 提供了一个新的生命周期函数getSnapshotBeforeUpdate...这个值会随后被传入到 componentDidUpdate 中, 然后我们就可以在 componentDidUpdate 中去更新组件的状态, 而不是在 getSnapshotBeforeUpdate

    1.4K10

    记住,永远都不要在 Flutter 中使用全局变量

    复杂的代码维护过程 更改或删除一个全局变量会触发一系列事件,因为使用全局变量的小部件和方法将受到影响。 如果要更改全局变量,则必须分析访问全局变量的每个小部件将如何受到影响并进行特定且必要的更改。...但是,有些开发人员会使用全局变量,因为他们在一个小团队中,并且在某些情况下不利于更改。 但是,无论应用程序的大小如何,当需要维护代码时,全局变量都会带来挑战。...如何以更好的方式管理状态 Flutter 是一个跨平台的动态框架,用于收集和处理来自用户的数据。 从开关到单选按钮,必须有效地管理数据状态。但是,全局变量会增加应用程序数据流的复杂性。...Provider 状态管理包 Provider 状态管理器包被广泛用于收集小部件状态数据并在状态更改时更新小部件。 使用提供程序时,只有受影响的小部件会在数据发生突变时被更新。...使用以下代码片段添加和使用 Provider 包插件: dependencies: flutter: sdk: flutter provider: ^3.1.0 Provider 程序包还允许你与多个类共享小部件状态

    4.5K30

    Hooks + TS 搭建一个任务管理系统(一)-- 登录注册页面

    高能预警:本项目采用了很多的 custom hook ,真的非常不错 下面开始今天的主题,实现登录注册页面 一、用状态驱动页面更新 为什么第一个要讲“用状态驱动页面更新”呢?...对象抛出的错误,我需要使用 then 中的第二个参数来接收这 错误对象,再返回这个错误,才能使用 catch 获取,正常情况下,catch 获取不到这个错误 // run是主入口,触发异步请求 //...有一定的了解,我们需要使用 provider 来包裹数据共享的范围,只有在这个范围内的元素才能使用这些数据 这里的意思是,所有的子元素都能够使用这个 context 容器 ,我们在使用的时候 进行数据的共享 六、按钮触发函数执行 在编写完了前面的几个 custom hook 之后,我们已经将数据接口转到了 context 当中,因此我们在调用里面的内容时,只需要调用 useAuth...状态管理 custom hook 在 react 中的强大威力 当 custom hook 返回函数时,需要使用 useCallback 包裹 多利用解构赋值,来优化代码 useState 设置的变量,

    1.5K11
    领券