自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (1)
  • 收藏
  • 关注

原创 ViewModel探索(2)之SavedState

Activity 有着一套 onSaveInstanceState 状态保存机制,旨在页面因 系统原因 被回收时可以保存状态,在页面重建后后可以恢复之前的状态。但是 ViewModel 是无法直接感知 onSaveInstanceState 被触发的时机的。于是乎,SavedState 这个中间组件就诞生了,它能够帮助开发者在 ViewModel 中处理 Activity 和 fragment 状态保存和恢复。

2023-04-24 09:51:32 212

原创 ViewModel探索(2)之SavedState

当页面恢复的时候,会从 onCreate(Bundle savedInstanceState) 中的 savedInstanceState 中取出原来存放的总的那个 Bundle,然后再取出一个个的属于 ViewModel 的子 Bundle,于是我们就能在 ViewModel 中复用之前存储的数据了。上面贴了几个类的源码,但是实际上想表达的东西很简单,就是Activity初始化ViewModel是用SavedStateViewModelFactory进行初始化的。已经到最后的最后了,我们上源码。

2023-04-24 09:48:23 344

原创 ViewModel探索(1)

首先ViewModel他的作用确实是用于保存页面(甚至是应用维度)的数据,其次就是ViewModel拥有数据还原的能力,我们都知道一旦配置发生变化(页面旋转、分辨率调整、系统字体变更),Activity就会进行重建,在重建后如果我们的数据是定义在Activity上,那这个时候数据就会丢失,但是如果我们是放在ViewModel上,页面重建后我们拿到的ViewModel实体依旧是重建前的实体,那就意味着原本我们保存在ViewModel里面的数据也会得以保存。从第一点来看,我首先有第一个疑问,数据存储组件?

2023-04-24 09:47:40 353

原创 Flutter Mvvm实践

Flutter Mvvm 实践

2022-11-16 14:52:32 2539 3

原创 Dart学习日记-控制流

通过指定多个 catch 语句,可以处理可能抛出多种类型异常的代码。如上述代码所示,捕获语句中可以同时使用 on 和 catch ,也可以单独分开使用。使用 on 来指定异常类型, 使用 catch 来 捕获异常对象。catch() 函数可以指定1到2个参数, 第一个参数为抛出的异常对象, 第二个为堆栈信息 ( 一个 StackTrace 对象 )。Dart 代码可以抛出和捕获异常。如果异常没有被捕获, 则异常会抛出, 导致抛出异常的代码终止执行。方法不会声明它们抛出的异常, 也不要求捕获任何异常。

2022-10-09 14:05:54 124

原创 Dart学习日记-运算符

要测试两个对象x和y是否表示相同的事物, 使用 == 运算符。(在极少数情况下, 要确定两个对象是否完全相同,需要使用 identical() 函数。(如上所见, == 运算符执行的是第一个运算符的函数。我们甚至可以重写很多运算符,包括 ==, 运算符的重写,参考 重写运算符。如果级联操作的对象可以为空,则对第一个操作使用空短级联 (?如果 x 或 y 可以 null,都为 null 时返回 true ,其中一个为 null 时返回 false。级联符号后面的代码对该对象进行操作,忽略任何可能返回的值。

2022-10-06 17:10:43 276

原创 Dart学习日记-函数与变量

变量仅存储对象的引用。这里名为 name 的变量存储了一个 String 类型对象的引用,“Bob” 则是该对象的值。name 变量的类型被推断为 String,但是你可以为其指定类型。如果一个对象的引用不局限于单一的类型,可以将其指定为 Object(或 dynamic)类型。

2022-09-05 19:38:37 372

原创 Dart学习日记-基础类型

Dart 支持两种 Number 类型:整数值;长度不超过 64 位,具体取值范围依赖于不同的平台。在 DartVM 上其取值位于 -263 至 263 - 1 之间。在 Web 上,整型数值代表着 JavaScript 的数字(64 位无小数浮点型),其允许的取值范围在 -253 至 253 - 1 之间。64 位的双精度浮点数字,且符合 IEEE 754 标准。int 和 double 都是 num 的子类。 num 中定义了一些基本的运算符比如 +、-、*、/ 等,还定义了 abs()、ceil(

2022-08-19 16:42:31 315

原创 LiveData-原理全解析

LiveData 是 Jetpack 推出的基于观察者的消息订阅/分发的可观察数据组件,具有宿主(Activity、Fragment)生命周期感知能力,这种感知能力可确保 LiveData 仅分发消息给处于活跃状态的观察者,即只有处于活跃状态的观察者才能收到消息。而LiveData 的事件分发机制,会根据监听者的活跃状态来判断是否分发数据源变化事件,这样的话,我们就能避免当前页面在后台时,响应了事件,做出一些无用的逻辑浪费性能。LiveData 遵循观察者模式。当生命周期状态发生变化时,LiveData 会

2022-07-11 17:25:09 5587 2

原创 Lifecycle-原理剖析

Lifecycle 是具备宿主生命周期感知能力的组件。它能持有组件(如 Activity 或 Fragment)生命周期状态的信息,并且允许其他观察者监听宿主的状态。它也是 Jetpack 组件库的的核心基础,包括我们就后面会讲到的 LiveData , ViewModel 组件等也都是基于它来实现的。本文章我们主要对Jetpack中的核心组件Lifecycle进行讲解,通过本文章我们将会学到:先简单了解一下整个Lifecycle的核心组成LifecycleOwner是一个接口,继承该接口的目的是为了声明它

2022-07-06 23:35:54 381

原创 Retrofit-原理全解析

Retrofit是一个RESTful的Http网络请求框架的封装,网络请求部分本质是由OKHttp完成的而我们学习Retrofit除了对Http请求有进一步的了解之外,我们还能通过学习Retrofit 源码感受到面向对象特性运用的极致与合理运用设计模式带来的代码优雅。本篇内容我是面向已经会用Retrofit的开发者写的,不会再重复介绍Retrofit用法,如果还不会使用Retrofit我建议先去看看官方文档后再来学习本文章,那么事不宜迟,我们开始吧!本文将会从源码角度,讲述Retrofit从初始化,到最后请

2022-07-05 21:38:11 2404

原创 Kotlin学习日记-简单了解反射

KType -> TypeKClass -> ClassKProperty -> FieldKFunction -> Method最基础的反射功能是获取Kotlin类运行时引用,要获取对静态已知Kotlin类的引用,可以使用以下语法:

2022-06-25 21:17:51 474

原创 Android-屏幕适配攻略

Android截止到目前为止,常规的加上各种奇奇怪怪的屏幕已经有2万多种(甚至更多),那这种情况下我们开发的时候还用px编写UI的话简直就是灾难,所以谷歌针对了不同分辨率的屏幕该如何适配这个问题下,使用了dp方案适配,接下来就了解一下dp方案的原理到底是怎么样的android中的dp在渲染前会将dp转成px,计算公式如下介绍完公式之后,首先我们设定一个UI稿尺寸,定义一个200*200dp的控件,再定义2个屏幕例子,来看看200dp的控件这个适配效果是怎么样计算200dp换算px后对比设计稿与两个设备宽度下

2022-06-25 09:07:05 1121

原创 View-RecycleView的缓存机制

2.怎么存?举例LinearLayoutManager,在布局子控件的时候,会先暂时缓存目前所有ViewHolder,调用LayoutMananger将每个ViewHolder缓存到相应的级别复用机制举例LinearLayoutManager,在布局的时候,会尝试从缓存中遵循顺序去获取ViewHolder...

2022-06-24 23:05:34 206 1

原创 Kotlin学习日记-解构声明

解构声明

2022-06-24 23:03:43 365

原创 Hash Map源码分析

HashMap源码分析

2022-06-24 13:43:57 182

原创 Kotlin学习日记-this限定符

this限定符

2022-06-24 13:42:01 602

原创 Kotlin学习日记-相等性

相等性

2022-06-24 13:40:59 274

原创 Kotlin学习日记-空安全

空安全

2022-06-24 13:36:52 240

原创 Kotlin学习日记-函数

函数

2022-06-24 13:33:38 230

原创 Kotlin学习日记-类与对象

类与对象

2022-06-24 13:24:19 234

原创 Kotlin学习日记-控制流程

控制流程

2022-06-24 13:15:51 176

原创 Kotlin学习日记-基础类型

Kotlin学习日记,基础类型

2022-06-24 13:14:26 583

原创 面向对象的六大原则(之二)

前言今天的分享会主要是针对程序员的,只能尽量举现实例子讲的通俗易懂,不过尽量保持通用的情况下,我还是会偏向专业.希望能够理解.1.初中级程序员与高级程序员的差别1.个人理解初中级程序员跟高级程序员的差别在于编程思想,如果仅仅只是为了实现功能而去编写代码,大家都能实现。但是不注重代码本身的质量的话.你写出来的产品很有可能就变成一个一次性的产品,一个高级程序员,编写

2016-11-11 10:15:37 920

转载 深入理解Android(一):Gradle详解

转载来自于 :http://www.infoq.com/cn/articles/android-in-depth-gradle 作者:邓凡平 编者按:随着移动设备硬件能力的提升,Android系统开放的特质开始显现,各种开发的奇技淫巧、黑科技不断涌现,InfoQ特联合《深入理解Android》系列图书作者邓凡平,开设深入理解Android专栏,探索Android从框架到应用开发

2016-10-09 11:53:37 335

原创 浅谈Handler机制

简介:异步消息处理-Handler机制是专门用来线程之间通讯用的.那到底是怎么实现这个线程通信的呢?接下来我们就看看这个Handler的工作原理.每个线程中只能有一个Handler对象.每个Handler对象创建的时候.都会从Looper的静态方法中.获取这个线程的Looper对象.所以在创建Handler线程之前.一定要先创建Looper的对象.不然会报错.但是程序开始的时候已经帮我

2016-10-09 10:24:26 431

浅谈框架与MVC

个人技术分享用PPT.个人理解 欢迎斧正

2016-11-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除