<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[PirateBrook的天梯]]></title><description><![CDATA[为公唤觉荆州梦，可待南柯一梦成...]]></description><link>https://blog.youkuaiyun.com/ConcurrentHashMap</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ConcurrentHashMap]]></copyright><item><title><![CDATA[必看，使用Provider优雅解决Riverpod的参数依赖]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/137056097</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/137056097</guid><author>ConcurrentHashMap</author><pubDate>Tue, 26 Mar 2024 20:02:48 +0800</pubDate><description><![CDATA[遇到问题，解决问题是技术人的一个思考准则，当我们遇到丑陋代码时，总可以找到合适的姿势去改变一点，使之优雅好用一点，世界上没有银弹, 但软件开发领域因为不断的进步，也在逐渐的越来越好（至少不想回去做Android原生）。可以把疑问放到评论区，一起讨论。]]></description><category></category></item><item><title><![CDATA[Flutter中被屏蔽的概念，Scheduler（调度器）]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/137028326</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/137028326</guid><author>ConcurrentHashMap</author><pubDate>Mon, 25 Mar 2024 22:44:55 +0800</pubDate><description><![CDATA[一切皆Widget，良好的底层设计都会屏蔽底层的逻辑，Java如此，Flutter亦是如此，甚至还有开发者面向Getx编程，那么我们可以做如是类比，Flutter是J2EE, Getx是Spring套件，作为Java后台开发，面向Spring开发是不够的，正如，跨平台Flutter 不了解底层机，FLutter底层，FLutter调度原理，Flutter 多线程模型，Flutter帧调度原理]]></description><category></category></item><item><title><![CDATA[一篇文章，告别Flutter状态管理争论，问题和解决]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/137003785</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/137003785</guid><author>ConcurrentHashMap</author><pubDate>Mon, 25 Mar 2024 09:41:23 +0800</pubDate><description><![CDATA[状态管理， Flutter， 移动端，我们创造工具，使用工具，改进工具，才有软件的繁荣。不一定非要讨论那个框架或技术有高低差异。在实际开发中，稳定，熟悉是稳定三角的另外两个重要的方面，不同的框架的缺点，总会有一些或者优雅，或者败絮其中的解决方案，在项目中，最重要的适合，合适的工具会让我们开发过程事半功倍，其次是稳定性和学习难度, 不过，一切都需要合适的权衡（trade off）动态的去匹配当下最重要的事。]]></description><category></category></item><item><title><![CDATA[Flutter开源项目Appflowy学习]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/134826693</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/134826693</guid><author>ConcurrentHashMap</author><pubDate>Wed, 06 Dec 2023 11:06:32 +0800</pubDate><description><![CDATA[Appflowy是一款仿Notion的软件，由两个核心开发人员构成的开源项目，基础是Rust编写业务逻辑，UI由Flutter或其他UI实现.项目地址：https://github.com/AppFlowy-IO/AppFlowy。]]></description><category></category></item><item><title><![CDATA[1. Appflowy 之 Bloc和freezed，理解Bloc和模式匹配]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/134826650</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/134826650</guid><author>ConcurrentHashMap</author><pubDate>Wed, 06 Dec 2023 11:05:28 +0800</pubDate><description><![CDATA[Flutter 提供了StatelessWidget 处理无状态的UI，StatefulWidget处理有状态的数据，这种分离很好的提供了对不同场景的支持，对于有状态的组件，Flutter开发常见的原生方式是在创建State，将UI剥离出状态，并将状态通过setState()函数重建Widget。如果不做任何分层，仅仅使用Widget，会导致所有的操作，都会在State当中，包括数据的获取，状态的变更，状态依赖的处理。当项目复杂性开始上升，维护项目的成本就会指数级别的增长。或者Rust match。]]></description><category></category></item><item><title><![CDATA[Android 开发中 常见的数据结构有哪些？]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/134796538</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/134796538</guid><author>ConcurrentHashMap</author><pubDate>Mon, 04 Dec 2023 23:35:42 +0800</pubDate><description><![CDATA[保留了元素的插入顺序，并提供快速查找的操作，使用哈希表存储键值对，同时使用一个双向链表维护插入顺序或访问顺序，具体取决于构造函数的参数。LinkedList 是Java的双链表实现，每个元素都包含前一个和后一个元素的引用，可以高效的在列表中进行插入和删除操作。ArrayList 基于动态数组实现，提供了一个基于数组的，动态增长的列表。是Android 提供的一种优化的数组映射结构，适用于存储稀疏数据，及大多数数据都是默认值。是Java中双端队列的实现，基于数组，并提供了高效的头部和尾部操作。]]></description><category></category></item><item><title><![CDATA[从Android面试题目溯源-2、Android为什么要使用Binder机制]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/134701960</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/134701960</guid><author>ConcurrentHashMap</author><pubDate>Wed, 29 Nov 2023 23:48:41 +0800</pubDate><description><![CDATA[Android Binder是一种和Android系统深度绑定的IPC机制，渗透在Android系统从硬件到软件的各个层面。最大程度的可控且适合移动端设备。]]></description><category></category></item><item><title><![CDATA[从Android面试题目溯源-1、创建线程有那几种方式]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/134672276</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/134672276</guid><author>ConcurrentHashMap</author><pubDate>Tue, 28 Nov 2023 17:12:07 +0800</pubDate><description><![CDATA[回到面试题，线程的创建和管理是开辟一个新的方法栈空间，执行新的函数调用。最初的原因是 IO性能远远低于CPU处理性能，在客户端上的体现是不耗时操作不阻塞主线程（UI线程）给用户提供流畅的体验，近些年来，协程的出现，本质上是Event Loop + 异步编程，轻量级的协程，优化的事件队列，比如Flutter实现的EventLoop由两部分组成。事件队列（Event Queue），存储异步事件微任务队列（Microtask Queue）存储立即执行的异步事件。]]></description><category></category></item><item><title><![CDATA[声明式UI（Declarative）和命令式（Imperative）UI的差异？]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/124125304</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/124125304</guid><author>ConcurrentHashMap</author><pubDate>Tue, 12 Apr 2022 20:45:00 +0800</pubDate><description><![CDATA[声明式UI（Declarative）和命令式（Imperative）UI的差异？]]></description><category></category></item><item><title><![CDATA[LiveData有什么优势？]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/124064376</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/124064376</guid><author>ConcurrentHashMap</author><pubDate>Sat, 09 Apr 2022 17:24:32 +0800</pubDate><description><![CDATA[感知生命周期，不需要activity管理数据，且不会发送数据到不活跃activity
数据管理，且最新数据总是被获得
组件销毁时，观察者会执行清理


]]></description><category></category></item><item><title><![CDATA[ViewModel解决了什么问题？]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/124062957</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/124062957</guid><author>ConcurrentHashMap</author><pubDate>Sat, 09 Apr 2022 16:38:07 +0800</pubDate><description><![CDATA[Android组件和异步回调声明周期不同步，导致内存泄露
configuration changes 导致数据重新获取
Activity职责不单一，负责了数据的获取


]]></description><category></category></item><item><title><![CDATA[梳理学习Kotlin，函数式编程]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/123913717</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/123913717</guid><author>ConcurrentHashMap</author><pubDate>Sat, 02 Apr 2022 09:59:42 +0800</pubDate><description><![CDATA[概念：
​		一切皆可视为函数。与面向对象（OOP），‘一切皆对象’ 相对应 ‘一切皆函数’也是函数式编程的含义。包括经常被形象成为，函数在Kotlin中是一等公民，这句话也是相对OOP编程范式中，方法必须依托类或对象才能存在。对象可以被传递，函数也可以被传递，对象可以作为返回值，函数也可以作为返回值。
如何理解Lambda expression
​		个人理解为，代数方程，函数的输入和输出明确后，方程式就已经定好 y = n * m，对于输入为类型为n, m，返回值为y类型的函数，都可以转换为相同的函数签]]></description><category></category></item><item><title><![CDATA[梳理学习Kotlin，特殊操作符的用法]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/123913693</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/123913693</guid><author>ConcurrentHashMap</author><pubDate>Sat, 02 Apr 2022 09:58:49 +0800</pubDate><description><![CDATA[空安全
fun String.print() {
    println(this)
}
val name: String? = null
name?.print()

非空安全
fun String.print() {
    println(this)
}
val name: String? = null
name!!.print()

Elvis Operator
val name: String? = null
val show = name ?: "Lucy"
show.print()

相等判断]]></description><category></category></item><item><title><![CDATA[梳理学习Kotlin，Function的用法]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/123913637</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/123913637</guid><author>ConcurrentHashMap</author><pubDate>Sat, 02 Apr 2022 09:57:28 +0800</pubDate><description><![CDATA[示例：
main函数
fun main(args: Array&lt;String&gt;) {}

完整函数
fun fib(n: Int): Long {
    return if (n &lt; 2) 1 else fib(n - 1) + fib(n - 2)
}

简化返回值函数
fun fib(n: Int): Long = if (n &lt; 2) 1 else fib(n - 1) + fib(n - 2)

参数带默认值
fun fib(n: Int = 5): Long = if (]]></description><category></category></item><item><title><![CDATA[梳理学习Kotlin，For Loops的用法]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/123913581</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/123913581</guid><author>ConcurrentHashMap</author><pubDate>Sat, 02 Apr 2022 09:56:07 +0800</pubDate><description><![CDATA[用法
// 闭区间
for (i in 1..9) println(i)
// 左闭右开
for (i in 1 until 9) println(i)
// 降序，闭区间
for (i in 9 downTo 1) println(i)
// 步长为 2
for (i in 1..9 step 2) println(i)
// 降序步长为 2
for (i in 9 downTo 1 step 2) println(i)
// 枚举集合
for (num in listOf(1, 2, 3)) print]]></description><category></category></item><item><title><![CDATA[梳理学习Kotlin，when表达式的用法]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/123852755</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/123852755</guid><author>ConcurrentHashMap</author><pubDate>Wed, 30 Mar 2022 17:52:11 +0800</pubDate><description><![CDATA[覆盖案例
var maxSurfaceTempIntK: Any = 100

fun calcNum() = 600

when(maxSurfaceTempIntK) {
    700 -&gt; println("Equal 700")
    0, 1 , 2 -&gt; println("Equal 0, or 1, etc...")
    in 20..300 -&gt; println("num in range")
    !in 300..400 -&gt; println("num ]]></description><category></category></item><item><title><![CDATA[Tell all the Android application components(简述Android应用组件).]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/117712668</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/117712668</guid><author>ConcurrentHashMap</author><pubDate>Thu, 10 Jun 2021 20:59:43 +0800</pubDate><description><![CDATA[Activity：窗口主体，是四大组件中负责展示与用户交互的组件
Service：服务，运行在后台或者前台，提供后台服务和一些前台服务响应
BoardCast Receiver: 负责消息通信，有静态很动态注册两种方式
Content Provider: 负责跨应用提供公共访问数据

...]]></description><category></category></item><item><title><![CDATA[What is the project structure of an Android Application?（Android项目结构）]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/117751376</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/117751376</guid><author>ConcurrentHashMap</author><pubDate>Thu, 10 Jun 2021 20:59:00 +0800</pubDate><description><![CDATA[AndroidManifest 每个应用或模块都有AndroidManifest.xml，为项目配置文件，配置权限，组件信息等信息。
java目录：Java源文件代码存放
res目录：应用图片，布局xml等文件存放

]]></description><category></category></item><item><title><![CDATA[What is Context? How is it used?（什么是上下文，如何去使用？）]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/117751689</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/117751689</guid><author>ConcurrentHashMap</author><pubDate>Thu, 10 Jun 2021 20:58:21 +0800</pubDate><description><![CDATA[Context代表了当前应用的状态，可以用于获取应用的资源
Context分为两种

Application Content
Activity Context

两者分别为Application和Activity提供，生命周期是不同的，比如使用单例模式需要context，使用Application Context，生命周期为整个应用。使用Activity Context会导致内存泄露，无法在activity结束后无法被GC回收。

...]]></description><category></category></item><item><title><![CDATA[Android ART和JVM的差异]]></title><link>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/117531793</link><guid>https://blog.youkuaiyun.com/ConcurrentHashMap/article/details/117531793</guid><author>ConcurrentHashMap</author><pubDate>Thu, 03 Jun 2021 18:31:44 +0800</pubDate><description><![CDATA[ART全称是Android Runtime，ART不符合JVM标准，所以不属于JVM，ART基于寄存器的数据结构，是专门为Android系统定制的虚拟机，通过编译工具链将基于栈的Java字节码转换为基于寄存器结构（内存中虚拟出的寄存器）的dex字节码，并通过AOT（Ahead of time）编译技术，安装时通过dex2oat工具，将dex字节码转换为当前设备的机器码，提高了运行效率。

Android N：

使用AOT编译，解释和JIT
对于JIT编译过的方法记录在Profile配置中
当设备闲置和充电]]></description><category></category></item></channel></rss>