<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[FrenkX72的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/FrenkX72</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; FrenkX72]]></copyright><item><title><![CDATA[学习笔记-Flutter-dart语法(2)]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/129872439</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/129872439</guid><author>FrenkX72</author><pubDate>Mon, 10 Apr 2023 14:40:34 +0800</pubDate><description><![CDATA[可实现noSuchMethod，进行一些处理。]]></description><category></category></item><item><title><![CDATA[学习笔记-Flutter-dart语法(1)]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/129859435</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/129859435</guid><author>FrenkX72</author><pubDate>Thu, 30 Mar 2023 16:03:25 +0800</pubDate><description><![CDATA[/ 常量// const定义常量 被他定义的常量 不止地址不能改 内部变量的地址也不能改，改动会报异常// final 定义的只是定制不能变，但里边的地址是可以变的 final跟kt中的val相似});]]></description><category></category></item><item><title><![CDATA[Android Framework源码分析-startActivity]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/127984987</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/127984987</guid><author>FrenkX72</author><pubDate>Tue, 22 Nov 2022 21:11:37 +0800</pubDate><description><![CDATA[activity的跳转，我们通常的写法无非就是startActivity或者startActivityForResult。问题：startActivity和startActivityForResult有什么区别呢？]]></description><category></category></item><item><title><![CDATA[Android Framework源码分析-LayoutInflater]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/127925875</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/127925875</guid><author>FrenkX72</author><pubDate>Sat, 19 Nov 2022 13:34:12 +0800</pubDate><description><![CDATA[*** 将布局XML文件实例化为其相应的View对象。它从不直接使用。而是使用android.app.Activity。* getLayoutInflationr（）或Context。getSystemService以检索已连接到当前上下文并为正在运行的* 设备正确配置的标准LayoutInflationer实例。** * 使用其他LayoutInflationer创建新LayoutInflationr。对于您自己的视图，可以使用cloneContext克。]]></description><category></category></item><item><title><![CDATA[Android Framewrok源码分析-事件分发机制(2)]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/127902378</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/127902378</guid><author>FrenkX72</author><pubDate>Thu, 17 Nov 2022 16:47:33 +0800</pubDate><description><![CDATA[我们先想清楚。我们点击屏幕，响应单击事件都需要先点下去，然后抬起来。这对应的事件是DOWN、UP。以DOWN开始，UP触发响应为结束。那滑动呢？以点击开始，左右滑动响应，以手抬起来为滑动结束。以DOWN开始，中间无数个MOVE，UP结束滑动。]]></description><category></category></item><item><title><![CDATA[Android JetPack学习笔记-DataStore]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/127423676</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/127423676</guid><author>FrenkX72</author><pubDate>Thu, 20 Oct 2022 11:36:36 +0800</pubDate><description><![CDATA[通过键值对存储，以异步、一致的事务方式存储数据克服了SharedPreferences的一些缺点，基于kotlin协程的Flow实现。并且可以对SP数据进行迁移。以protobuffer协议进行存储，速度更快，效率更高。]]></description><category></category></item><item><title><![CDATA[Android JetPack学习笔记-Navigation]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/127319315</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/127319315</guid><author>FrenkX72</author><pubDate>Fri, 14 Oct 2022 17:50:37 +0800</pubDate><description><![CDATA[最后跳到目标节点进行跳转，如果是activity的，进行activity的Navigator进行StartActivity。到此返回了解析完了，返回了我们根节点属性的所生成的NavGraph，回到NavController的setGraph方法中。此时就会跳到对应的fragment中，此时咱们可以跳到fragmentC中，在fragmentC我们获取了这个paramas参数，是xhua。这一块我们注意到有获取注解的一系列操作，我们看看对应的有注解的类的注解值。]]></description><category></category></item><item><title><![CDATA[Android JetPack学习笔记-Paging]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/126364988</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/126364988</guid><author>FrenkX72</author><pubDate>Wed, 17 Aug 2022 18:57:56 +0800</pubDate><description><![CDATA[到这我们compute一路走下来就完全走完了，一路上我们通过factory创建了对应的dataSource，通过dataSource请求数据之后，进行了storage的初始化。到这，首次刷新UI大家就能了解了，数据传递在AsyncPagedListDiffer此类中，有多少数据找它拿，然后我们在我们些的adapter的onBindViewHolder方法直接获取对应实例，直接赋值给控件即可。到此为止，咱们的刷新UI就结束了，但是我们仔细看它是如何对adapter进行修改的。这样就去刷新我们的数据了。...]]></description><category></category></item><item><title><![CDATA[Android JetPack学习笔记-ViewModel]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/126117111</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/126117111</guid><author>FrenkX72</author><pubDate>Wed, 03 Aug 2022 17:28:03 +0800</pubDate><description><![CDATA[了解ViewModel总是会先说，它横竖屏数据不会消失。熟悉AMS和启动的应该知道横竖屏时配置更改会调用ActivityThread.


        重新启动先后执行handleDestoryActivity和handleLaunchActivity。先销毁再启动。


        代码里有注释，不多讲解了。这么看时序就是onPause->onStop->retainNonConfigurationInstances->onDestory。retainNonConfigurationInstanc]]></description><category></category></item><item><title><![CDATA[Android JetPack学习笔记-DataBinding]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/126033681</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/126033681</guid><author>FrenkX72</author><pubDate>Thu, 28 Jul 2022 18:24:56 +0800</pubDate><description><![CDATA[这代码是我贴出来的第三次了，应该很有印象了。第一次注册时，使用的mOberverble是咱们setUser的user对象，所以调用addOnPropertyChangedCallback方法就得到了后续的注册，这个callback是当时的WeakPropertyListener监听。这一路的操作就把咱们的布局绑定到了ActivityDataBindTestBinding文件中，然后再viewDataBinding的构造方法中进行了渲染，通过sdk的比较，要么使用编舞者要么用线程来更新。...]]></description><category></category></item><item><title><![CDATA[Android JetPack学习笔记-LiveData]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/125993936</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/125993936</guid><author>FrenkX72</author><pubDate>Tue, 26 Jul 2022 15:18:13 +0800</pubDate><description><![CDATA[这三行代码不复杂，第一行进行实例化一个livedata对象，第二行进行绑定联系。最后一行设置数据。其中setValue在主线程使用，postValue在子线程使用。我们先浅看一下postValue和setValue的区别。setValue咱们先看postValue，setValue后续看。............]]></description><category></category></item><item><title><![CDATA[Android JetPack学习笔记-LifeCycle]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/125975020</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/125975020</guid><author>FrenkX72</author><pubDate>Mon, 25 Jul 2022 16:11:09 +0800</pubDate><description><![CDATA[此类中有2个字段，观察者对象和观察者信息，他都存了什么信息呢，我们看看其构造函数中调用的getInfo方法,以下就稍微跳一些。然后通过‘下一状态’值和之前的状态值作比较，如果小于之前的值，表示是从显示到不显示，调用。获取完状态后，调用moveToState的方法，此方法有重要的一步，就是同步状态sync()的方法，然后再获取方法的参数进行判断，可以看出参数最高只能是2个。，我们点击过去发现是个接口，所以我们要去找实现类，还记得在入口处我们返回的。的状态，这个咱们从入口看到过，应该比较熟，最后在调用它的。..]]></description><category></category></item><item><title><![CDATA[学习笔记-kotlin(7)]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/124657848</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/124657848</guid><author>FrenkX72</author><pubDate>Mon, 09 May 2022 01:20:54 +0800</pubDate><description><![CDATA[目录

协程

1.Thread.sleep来阻塞

2.runBlocking阻塞主线程

3.join来阻塞

4.runBlocking中阻塞（2）

5.作用域构建器



协程

首先配置，在build.gradle中 配置：


plugins {
    id 'java-library'
    id 'kotlin'
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatib......]]></description><category></category></item><item><title><![CDATA[学习笔记-kotlin(6)]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/124507532</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/124507532</guid><author>FrenkX72</author><pubDate>Sat, 30 Apr 2022 13:14:58 +0800</pubDate><description><![CDATA[1.对象

1.1.嵌套类

如果一个类只对另一个有用，那么将其嵌套到该类中，并使这两个类保持在一起是符合逻辑的，可使用嵌套类。


    //嵌套类
    class Player2() {
        class Equipment(var equipName:String) {
            fun showEquip() {
                println("Equipment: $equipName")
       .....]]></description><category></category></item><item><title><![CDATA[学习笔记-Kotlin(5)]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/124471677</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/124471677</guid><author>FrenkX72</author><pubDate>Fri, 29 Apr 2022 17:18:11 +0800</pubDate><description><![CDATA[1.Filed

针对你定义的每一个属性，Kotlin都会产生一个filed、getter和setter。你不能直接定义field，kotlin封装号了field，保护它的数据，只暴露了getter和setter使用。只有可变属性才会有setter方法。但在需要控制如何读写属性数据时，你也可以自定义它们。需要注意的是，在java中没有给field定义访问模式时，默认的是public。而kotlin，没有定义访问模式时，默认的是private。


    class Player {
 ......]]></description><category></category></item><item><title><![CDATA[学习笔记-Kotlin(4)]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/124464090</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/124464090</guid><author>FrenkX72</author><pubDate>Thu, 28 Apr 2022 03:28:10 +0800</pubDate><description><![CDATA[目录

集合

1.List

1.1.list创建与元素获取

1.2.mutator函数

1.3.集合遍历

1.4.结构

2.Set

2.1.List和Set转换

3.Map

3.1.Map的创建

3.2.读取Map的值

3.3.map遍历

3.4.可变集合、mutator、getOrPut

集合

List、Set和Map类型的变量分为两类。只读和可变

1.List

1.1.list创建与元素获取

getOrElse是一个安全索引取值函数，它需要两个参数......]]></description><category></category></item><item><title><![CDATA[学习笔记-Kotlin(3)]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/124453674</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/124453674</guid><author>FrenkX72</author><pubDate>Wed, 27 Apr 2022 17:46:15 +0800</pubDate><description><![CDATA[目录

1.字符串操作

2.数字类型

3.标准函数库

   (1).apply

   (2).let

   (3).run

   (4).with

   (5).also

   (6).takeIf和takeUnless

1.字符串操作

indexOf():用法跟java相同

substring():字符串截取。跟java相同，但其中有一种用法是subString(range:Int)


"frenk".su......]]></description><category></category></item><item><title><![CDATA[学习笔记-Kotlin(2)]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/124425700</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/124425700</guid><author>FrenkX72</author><pubDate>Tue, 26 Apr 2022 23:17:43 +0800</pubDate><description><![CDATA[1.函数内联

 有关内联的引出，有些材料上说的是：在JVM上，你定义的lambda会以对象实例的形式存在，JVM会为所有同lambda打交道的变量分配内存，这就产生了内存开销，更糟的是，lambda的内存开销会带来严重的性能问题。幸运的是，kotlin有一种优化机制叫内联，有了内联，JVM就不需要使用lambda对象实例了，因而避免了变量内存分配。哪里需要使用lambda，编译器就会将函数体复制粘贴到哪里。
 值得注意的是，使用lambda的递归函数无法内联，因为会导致赋值粘贴无限循环，编译会警告....]]></description><category></category></item><item><title><![CDATA[学习笔记-Kotlin(1)]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/124418325</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/124418325</guid><author>FrenkX72</author><pubDate>Tue, 26 Apr 2022 01:50:32 +0800</pubDate><description><![CDATA[kotlin学习笔记]]></description><category></category></item><item><title><![CDATA[Android view绘制]]></title><link>https://blog.youkuaiyun.com/FrenkX72/article/details/120268678</link><guid>https://blog.youkuaiyun.com/FrenkX72/article/details/120268678</guid><author>FrenkX72</author><pubDate>Tue, 14 Sep 2021 14:29:20 +0800</pubDate><description><![CDATA[阅读他人的，自己进行总结的。原文章：

Android LayoutInflater原理分析，带你一步步深入了解View(一)_郭霖的专栏-优快云博客_layoutinflater

Android视图绘制流程完全解析，带你一步步深入了解View(二)_郭霖的专栏-优快云博客_android 视图绘制

Android视图状态及重绘流程分析，带你一步步深入了解View(三)_郭霖的专栏-优快云博客

Android自定义View的实现方法，带你一步步深入了解View(四)_郭霖的专栏-优快云博客_a]]></description><category></category></item></channel></rss>