<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Ice_Lemon_dc的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Ice_Lemon_dc</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Ice_Lemon_dc]]></copyright><item><title><![CDATA[HarmonyOS]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137810991</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137810991</guid><author>Ice_Lemon_dc</author><pubDate>Wed, 17 Apr 2024 14:38:45 +0800</pubDate><description><![CDATA[在UIAbility实例创建之前，允许开发者为该实例创建一个唯一的字符串Key，创建的UIAbility实例绑定Key之后，后续每次调用startAbility()方法时，都会询问应用使用哪个Key对应的UIAbility实例来响应startAbility()请求。上文已经提到，组件的销毁是从组件树上直接摘下子树，所以先调用父组件的aboutToDisappear，再调用子组件的aboutToDisappear，然后执行初始化新页面的生命周期流程。需要注意的是，@Link变量不能在组件内部进行初始化。]]></description><category></category></item><item><title><![CDATA[组件化/Kotlin]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137607667</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137607667</guid><author>Ice_Lemon_dc</author><pubDate>Fri, 12 Apr 2024 16:19:58 +0800</pubDate><description><![CDATA[Kotlin中使用class关键字定义类，类可以有主构造器、次构造器、属性、方法、初始化块等组成部分。类有以下特性：类可以使用open关键字标记为可继承的，否则默认为不可继承的类可以使用abstract关键字标记为抽象的，抽象类不能被实例化，只能被继承类可以使用data关键字标记为数据类，数据类会自动生成equals、hashCode、toString、copy等方法类可以使用sealed关键字标记为密封类，密封类的子类只能在同一个文件中定义，用于表示有限的继承层次。]]></description><category></category></item><item><title><![CDATA[开源框架/Jetpack]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137607633</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137607633</guid><author>Ice_Lemon_dc</author><pubDate>Thu, 11 Apr 2024 15:37:17 +0800</pubDate><description><![CDATA[应用拦截器在RetryAndFollowUpInterceptor之前,网络拦截器位于ConnectInterceptor和CallServerInterceptor之间.一旦发生错误重试或者网络重定向，网络拦截器可能执行多次，因为相当于进行了二次请求，但是应用拦截器永远只会触发一次。另外如果在CacheInterceptor中命中了缓存就不需要走网络请求了，因此会存在短路网络拦截器的情况。从使用场景看，应用拦截器因为只会调用一次，通常用于统计客户端的网络请求发起情况；]]></description><category></category></item><item><title><![CDATA[设计模式~]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137607739</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137607739</guid><author>Ice_Lemon_dc</author><pubDate>Thu, 11 Apr 2024 15:37:00 +0800</pubDate><description><![CDATA[优点：相比于工厂方法模式不用一直创建新的对应的类的小工厂，扩展性更加，不会使代码越来越多，越复杂，把生产对象的过程抽象化，这样就可以和业务逻辑解耦，如果有新扩展，可以在IOHandlerFactory中增加对应的方法。程序中包括一个被观察者，多个观察者对象，消息通知是遍历执行的，一个观察者卡顿，会影响整体的执行效率，这时候可以考虑采用异步的方式。缺点：工厂方法模式的缺点是每增加一个java类，就需要增加一个对应的工厂类，当我们的类很多的时候，那么对应的工厂类也会很多。]]></description><category></category></item><item><title><![CDATA[网络编程/其他]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137607904</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137607904</guid><author>Ice_Lemon_dc</author><pubDate>Thu, 11 Apr 2024 15:36:50 +0800</pubDate><description><![CDATA[（1）HTTP 明文传输，数据都是未加密的，安全性较差，HTTPS（SSL+HTTP） 数据传输过程是加密的，安全性较好。（2）使用 HTTPS 协议需要到 CA（Certificate Authority，数字证书认证机构） 申请证书，一般免费证书较少，因而需要一定费用。]]></description><category></category></item><item><title><![CDATA[Framework/性能优化]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137607594</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137607594</guid><author>Ice_Lemon_dc</author><pubDate>Thu, 11 Apr 2024 15:36:17 +0800</pubDate><description><![CDATA[UI线程创建时，就创建了一个Looper，Looper内部维护这一个MessageQueue。Looper通过开启一个while(true)死循环来轮询MessageQueue中的Message。当Looper轮询到Message时，就分发此Message。Handler在子线程发送消息到MessageQueue，Message被Looper取出来后，分发给handler的handleMessage方法来处理。]]></description><category></category></item><item><title><![CDATA[基础/UI/组件]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137515610</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137515610</guid><author>Ice_Lemon_dc</author><pubDate>Tue, 09 Apr 2024 22:03:14 +0800</pubDate><description><![CDATA[（1）继承现有控件（TextView/ImageView/LinearLayout），对其控件的功能进行拓展（2）将现有控件进行组合，实现功能更加强大控件。（3）重写View/ViewGroup实现全新的控件。]]></description><category></category></item><item><title><![CDATA[面向对象/集合框架/并发]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137514523</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137514523</guid><author>Ice_Lemon_dc</author><pubDate>Tue, 09 Apr 2024 22:03:00 +0800</pubDate><description><![CDATA[（1）一个类只能继承一个抽象类，而一个类却可以实现多个接口（2）接口中不能含有静态代码块以及静态方法，而抽象类可以有静态代码块和静态方法（3）抽象类可以提供成员方法的实现细节，而接口中的方法不可以（4）接口的方法默认是public，所有方法在接口中不能有实现，抽象类可以有非抽象的方法（5）抽象类中的成员变量可以是各种类型的，而接口中的成员变量只能是public static final类型的。]]></description><category></category></item><item><title><![CDATA[试题111]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137480747</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/137480747</guid><author>Ice_Lemon_dc</author><pubDate>Sun, 07 Apr 2024 22:24:23 +0800</pubDate><description><![CDATA[3.MVVM原理-lifecycle运行机制、viewmodel存储机制、APT。6.LiveData数据倒灌问题  内部version。10.NestedScrollView原理。5.连续点击处理-kotlin扩展方法。RxJava 布局文件里面绑定。9.自定义view滑动冲突。8.线程安全 - AQS。2.ARouter原理。]]></description><category></category></item><item><title><![CDATA[Android外部存储与内部存储详解]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/128009558</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/128009558</guid><author>Ice_Lemon_dc</author><pubDate>Tue, 12 Sep 2023 19:27:43 +0800</pubDate><description><![CDATA[Cache和Files分别对应【设置】里应用的【清除缓存】和【清除数据】功能，一些手机助手在清理垃圾文件的时候也是清理Cache缓存。默认路径是xxxxx/包名/cache，不同手机厂商的这个路径有差别。Cache：获取App的缓存路径，用来放一些临时文件。Files：获取app的文件路径，用来放一些长期文件。Cache和Files的区别。]]></description><category></category></item><item><title><![CDATA[MySQL]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/132791166</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/132791166</guid><author>Ice_Lemon_dc</author><pubDate>Sun, 10 Sep 2023 16:59:38 +0800</pubDate><description><![CDATA[增加查询效率（数据量大），当给表添加索引后，新插入、删除一条数据，就会让索引进行重新排列，频繁的增加或者删除数据，索引的效率不会很高。alter table 从表名 add constraint 外键名 foreign key(从表外键列名) references 主表(主键列名)insert into 表(字段1,字段2,字段3…) values(值1, 值2,值3…),(值1, 值2,值3…),(值1, 值2,值3…外键：把一张表的主键拿到另一张表中作为一个普通的字段，通过外键可以把两张表连接起来。]]></description><category></category></item><item><title><![CDATA[Bitmap加载方式]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/126713931</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/126713931</guid><author>Ice_Lemon_dc</author><pubDate>Mon, 05 Sep 2022 22:09:05 +0800</pubDate><description><![CDATA[Bitmap]]></description><category></category></item><item><title><![CDATA[RecyclerView 性能优化]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/117717038</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/117717038</guid><author>Ice_Lemon_dc</author><pubDate>Tue, 08 Jun 2021 22:05:56 +0800</pubDate><description><![CDATA[1. 数据处理和视图加载分离
获取到数据的处理逻辑我们也应该放在异步处理，这样 Adapter 在 notify change 后，ViewHolder 就可以简单无压力地做数据与视图的绑定逻辑
2. 数据优化
对于新增或者删除数据通过 DiffUtil / AsyncListDiffer来进行局部刷新数据(覆写getChangePayload方法进行控件级别的刷新)
3. 布局优化
减少布局层级，可以考虑使用自定义 View 来减少层级，或者更合理地设置布局来减少层级从而减少过渡绘制；

...]]></description><category></category></item><item><title><![CDATA[Handler机制]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/117715237</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/117715237</guid><author>Ice_Lemon_dc</author><pubDate>Tue, 08 Jun 2021 21:33:43 +0800</pubDate><description><![CDATA[Handler通信
Handler：负责发送消息及处理消息
Looper：复制不断的从消息队列中取出消息，并且给发送本条消息的Handler
MessageQueue：负责存储消息
Message:消息本身，负责携带数据

Handler的构造方法


]]></description><category></category></item><item><title><![CDATA[自定义View和事件分发]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/105743849</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/105743849</guid><author>Ice_Lemon_dc</author><pubDate>Sun, 25 Apr 2021 00:30:32 +0800</pubDate><description><![CDATA[2.自定义View和ViewGroup套路总结
2.1 自定义View的套路：
2.1.1 自定义属性，获取自定义属性（达到配置的效果）
    2.1.2 onMeasure()方法用于测量计算自己的宽高，前提是继承自View，如果是继承自系统已有的 TextView , Button ,已经给你计算好了宽高

    2.1.3 onDraw() 用于绘制自己的显示 
    2.1.4 onTouch() 用于与用户交互

2.2 自定义ViewGroup的套路：
    2.2.1 自定义属性，获取]]></description><category></category></item><item><title><![CDATA[Material Design - CoordinatorLayout、SnackBar源码分析]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/115984808</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/115984808</guid><author>Ice_Lemon_dc</author><pubDate>Thu, 22 Apr 2021 00:06:31 +0800</pubDate><description><![CDATA[Material Design - CoordinatorLayout、SnackBar源码分析
CoordinatorLayout的behavior如何工作


自定义Behavior放的全类名
parseBehavior解析布局文件中制定的Behavior
Behavior到底是怎么实例的，调用 parseBehavior 解析我们设置的 layout_behavior :
1.获取设置好的全类名  xxx.xx.xx 还可以是  .xx
2.通过类名获取 class 然后获取两个参数的构造方法
3.通]]></description><category></category></item><item><title><![CDATA[Kotlin笔记]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/105743632</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/105743632</guid><author>Ice_Lemon_dc</author><pubDate>Tue, 19 May 2020 00:15:36 +0800</pubDate><description><![CDATA[一.Lambda表达式
Lambda结构：{参数1 ：参数类型，参数2：参数类型 -&gt; 函数体}
val list = listOf("apple", "Orange", "Banana")
val lambda = {fruit: String -&gt; fruit.length}
val maxLengthFruit = list.maxBy(lambda)

即
val maxLen...]]></description><category></category></item><item><title><![CDATA[Kotlin高阶函数]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/106170850</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/106170850</guid><author>Ice_Lemon_dc</author><pubDate>Sun, 17 May 2020 12:35:10 +0800</pubDate><description><![CDATA[定义：参数有函数类型或者返回值是函数类型的函数，都叫做高阶函数。
fun a(funParam: (Int) -&gt; String): String {
  return funParam(1)
}

要传一个函数类型的参数，或者把一个函数类型的对象赋值给变量有三种方法
fun num1AndNum2(num1: Int, num2: Int, operation: (Int, Int) -&gt; Int): Int {
	val result = operation(num1, num2)
	ret]]></description><category></category></item><item><title><![CDATA[LruCache和DiskLruCache]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/79605293</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/79605293</guid><author>Ice_Lemon_dc</author><pubDate>Sun, 18 Mar 2018 22:06:12 +0800</pubDate><description><![CDATA[//** 
 * 三级缓存： 
 * 一级缓存：内存缓存 
 * 二级缓存：硬盘缓存 
 * 三级缓存：网络缓存 
 * 
 * @author 43497 
 * @date 2018/3/15 
 */

public class LruCacheUtil {

/**
 * 内存缓存最大值--设置为可使用的内存的1/8
 * LruCache 如果缓存的大小已经达到了最大值,最近时间最少使用...]]></description><category></category></item><item><title><![CDATA[Android主题]]></title><link>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/78822276</link><guid>https://blog.youkuaiyun.com/Ice_Lemon_dc/article/details/78822276</guid><author>Ice_Lemon_dc</author><pubDate>Sat, 16 Dec 2017 22:00:45 +0800</pubDate><description><![CDATA[1.系统主题 
        Theme.Light：标准主题的变体，该主题的背景和用户元素使用相反的颜色主题。它是Android3.0以前版本的应用程序默认推荐的使用主题。 
        Theme.NoTitleBar.Fullscreen：移除标题栏和状态栏，全屏显示。 
        Theme.Dialog：让Activity看起来像对话框的有用主题。 
        Them...]]></description><category></category></item></channel></rss>