<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ymeddmn的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ymeddmn</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ymeddmn]]></copyright><item><title><![CDATA[android源码宇宙-Glide]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/125944096</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/125944096</guid><author>ymeddmn</author><pubDate>Sat, 23 Jul 2022 10:07:34 +0800</pubDate><description><![CDATA[Glide可以实现生命周期绑定的操作，如果我们的请求是在activity或fragment中请求图片的，则会使用添加fragemtn的方式让我们的请求绑定成功生命周期（理解不了的是，为什么到了现在glide仍然没有向Lifecycle转换的想法）。最终会生成一个RequestManager用来处理请求。绑定生命周期结束后，则对url进行保存，同时可以决定我们加载的图片类型，例如最后是请求的加载逻辑，首先glide会尝试去内存中获取图片数据，如果获取成功那么直接返回。...]]></description><category></category></item><item><title><![CDATA[android源码宇宙-Retrofit]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/125569125</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/125569125</guid><author>ymeddmn</author><pubDate>Sat, 02 Jul 2022 09:24:13 +0800</pubDate><description><![CDATA[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S8L4CTCX-1656725069031)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ffa3fa2439714c76a0b10cc1c0e22770~tplv-k3u1fbpfcp-zoom-1.image)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1NV02cb6-1656725069033)(https://p3-juejin]]></description><category></category></item><item><title><![CDATA[android源码宇宙-Choreographer]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/125360171</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/125360171</guid><author>ymeddmn</author><pubDate>Sun, 19 Jun 2022 17:35:19 +0800</pubDate><description><![CDATA[Choreographer主要用来申请垂直脉冲信号，指导ViewRootImpl完成屏幕刷新讲Choreographer要从ViewRootImpl开始讲起应用在requestLayout，invalidate后都会开始调用ViewRootImpl.scheduleTraversals来调度Choreographer关于下图中的mTraversalRunnable，它会在适当的时机被Choreographer回调，回调后会依次执行ViewRootImpl.doTraversal方法--> performTr]]></description><category></category></item><item><title><![CDATA[android源码宇宙-StateFlow]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/125343225</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/125343225</guid><author>ymeddmn</author><pubDate>Sat, 18 Jun 2022 09:09:06 +0800</pubDate><description><![CDATA[![image.png](https://img-blog.csdnimg.cn/img_convert/5e6618079c5209c3b0e2107783b5adfc.png#clientId=ude8364ee-3cb9-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=180&id=ua612e986&margin=[object Object]&name=image.png&originHeight=180&originWidth=547&origin]]></description><category></category></item><item><title><![CDATA[android源码宇宙-activity启动源码]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/125237262</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/125237262</guid><author>ymeddmn</author><pubDate>Sat, 11 Jun 2022 18:12:52 +0800</pubDate><description><![CDATA[Activity栈中的一个节点，用于展示一个Activity它集成了WindowToken实现了WindowManagerService中的一个接口既然如此顺便看看WindowToken吧用来替代ActivityStackSupervisor这东西是ActivityThread中的一个变量它可以作为一个测试框架的根基，因为它是先于我们的Application和Activity启动的，所以它可以监听到我们创建Activity和Application操作。android是支持自定义Instrumentation]]></description><category></category></item><item><title><![CDATA[android源码宇宙-android的Activity如何展示View]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/124893992</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/124893992</guid><author>ymeddmn</author><pubDate>Sat, 21 May 2022 08:40:40 +0800</pubDate><description><![CDATA[源码
要点

mContentParent：下文中的mContentParent实际类型是ActionBarOverlayLayout，是我们布局文件的直接父布局
Activity的展示过程大概就是atms回调activity的启动方法，然后会进行初始化PhoneWindow、DecorView。初始化完成后会等待wms回调onResume的逻辑处理，这里的重点是我们的UI展示关键类ViewRootImpl，它就是在这里处理的，最后onResume中会进行activity以下五个回调方法的处理：onNewI]]></description><category></category></item><item><title><![CDATA[android源码宇宙-SystemServer源码阅读简单理解]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/124783716</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/124783716</guid><author>ymeddmn</author><pubDate>Sun, 15 May 2022 16:14:50 +0800</pubDate><description><![CDATA[欢迎关注我的公众号：安安安安卓


因为一些中所不周知的原因，近期我会发布大量的理论或者源码的文章。这些文章中有大部分是我前几年的笔记，或者之前没来得及记录成笔记的。比较适合对相关框架源码有一定了解的开发人员观看。否则可能会引起不适，手动狗头。

SystemServer
老生常谈了，也不是啥重点，不过懂的话还是很有用的。这东西用来创建和管理系统服务，同时也可以管理我们的应用进程
关于他们的源码分析，并不能只看他自己，需要从zygote开始查看，然后还要辅助app进程的启动来理解
源码
从Zygote到S.]]></description><category></category></item><item><title><![CDATA[android源码宇宙-Okhttp源码简单阅读]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/124763908</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/124763908</guid><author>ymeddmn</author><pubDate>Sat, 14 May 2022 09:20:49 +0800</pubDate><description><![CDATA[因为一些众所不周知的原因，近期我会发布大量的理论或者源码的文章。这些文章中有大部分是我前几年的笔记，或者之前没来得及记录成笔记的。比较适合对相关框架源码有一定了解的开发人员观看。否则可能会引起不适，手动狗头。


Okhttp的使用

源码
阅读大纲

同步调用网络请求流程
异步调用网络请求流程
Dispatcher类的代码逻辑
几个拦截器的逻辑

查看同步调用主流程

从newCall开始

调用RealCall.newRealCall创建Call

RealCall.newRealCall



因为.]]></description><category></category></item><item><title><![CDATA[Compose默认主题Color不够用怎么办？，一招解决]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/124333185</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/124333185</guid><author>ymeddmn</author><pubDate>Thu, 21 Apr 2022 22:08:04 +0800</pubDate><description><![CDATA[为什么要自定义主题
 primary: Color,
    primaryVariant: Color,
    secondary: Color,
    secondaryVariant: Color,
    background: Color,
    surface: Color,
    error: Color,
    onPrimary: Color,
    onSecondary: Color,
    onBackground: Color,
    onSurface: Colo]]></description><category></category></item><item><title><![CDATA[Jetpack Compose使用自定义操作符实现绘制五角星效果]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/124211249</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/124211249</guid><author>ymeddmn</author><pubDate>Sat, 16 Apr 2022 11:56:44 +0800</pubDate><description><![CDATA[公众号：安安安安卓

说明
compose中我们的所有ui操作，包括一些行为，例如：点击、手势等都需要使用Modifier来进行操作。因此对Modifier的理解可以帮助我们解决很多问题的
自定义星行Modifier
本文我们打算自定义一个Modifier，通过这个modifier我们可以实现用一个操作符就画出五角星的效果
原理
我们实现绘制五角星的原理如下图，首先我们会虚构两个圆，将内圆和外圆角度平分五份，然后依次连接内圆和外圆的切点的坐标，然后使用path绘制完成。

实现
代码中的实现涉及到自定义绘.]]></description><category></category></item><item><title><![CDATA[compose 页面间参数正向反向传递方法]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/124023363</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/124023363</guid><author>ymeddmn</author><pubDate>Thu, 07 Apr 2022 18:29:16 +0800</pubDate><description><![CDATA[名词解释
什么是正向反向参数传递呢
正向：相当于一个Activity启动另一个Activity并向其传递参数；
反向：相当于一个Activity退出的时候向启动它的Activity回传参数；
思路
本文主要讲反向参数传递，正向参数传递参考：正向参数传递
起先关于这个问题是没什么思路的，网上（包括google官网）也没有相关说明，以至于公司新开的项目，虽然使用compose来写的，但是反向参数传递却是自定义的一个总线框架来做的。

使用总线框架做明显是不合适的。

基于这样一个原因，项目完成后我决定研究一下这]]></description><category></category></item><item><title><![CDATA[2022年学习计划完成情况贴]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/123941014</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/123941014</guid><author>ymeddmn</author><pubDate>Sun, 03 Apr 2022 17:38:15 +0800</pubDate><description><![CDATA[正式将今年的学习计划搬到csdn来更新，原因无他，掘金没有置顶功能
学习计划完成情况

20220403
使用RecycleView优雅的实现数据列表更新

android使用知识增加键盘弹出和关闭操作方法


20220326
compose中返回键的监听方式实现


20220326
 Compose实用知识整理，增加了防快速点击效果操作符，和Compose跳转activity并返回结果的方法


20220107
使用compose实现淘票票选电影座位的效果


20220102
android事件流]]></description><category></category></item><item><title><![CDATA[使用RecycleView优雅的实现数据列表更新]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/123938515</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/123938515</guid><author>ymeddmn</author><pubDate>Sun, 03 Apr 2022 15:32:11 +0800</pubDate><description><![CDATA[近期需要对公司的祖传项目进行一些重构，在重构过程中涉及到多个列表的重构。老的列表中更新数据一直使用的notifyDataSetChanged进行数据的更新。从我入职时期这便是我的一大心病，因此这次一并解决

问题描述
关于notifyDataSetChanged的弊端，无需赘言，他会对 Recycleview 的整个列表进行刷新。因此在大数据量场景下（目前此种更新数据方法也不早再是官方推荐的了），这可能是很大的性能障碍。
解决方案：

使用 ListAdapter 进行局部刷新数据
使用 DiffUtil.]]></description><category></category></item><item><title><![CDATA[使用kotlin委托实现ViewBind懒加载]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/123932382</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/123932382</guid><author>ymeddmn</author><pubDate>Sun, 03 Apr 2022 08:20:43 +0800</pubDate><description><![CDATA[本文我们使用继承 Lazy 和 lazy 关键字实现 Viewbinding 的注入
继承 Lazy 方式
实现代码
fun &lt;T : ViewBinding&gt; AppCompatActivity.binding(inflate: (LayoutInflater) -&gt; T): Lazy&lt;T&gt; {
    return MainLazy(this, inflate)
}

class MainLazy&lt;T : ViewBinding&gt;(
    val activi]]></description><category></category></item><item><title><![CDATA[Compose实用知识]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/123751946</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/123751946</guid><author>ymeddmn</author><pubDate>Sat, 26 Mar 2022 10:43:33 +0800</pubDate><description><![CDATA[本文主要讲解一些安卓中实用的compose知识，长期更新

防快速点击
说明
防快速点击主要使用 Modifier 操作符来实现，代码如下
代码
@Composable
fun Modifier.avoidRepeatclickable(millis: Long = 500, onClick: () -&gt; Unit): Modifier {
    var timeStamp by remember {
        mutableStateOf(0L)
    }

    return cli.]]></description><category></category></item><item><title><![CDATA[Compose中模仿Activity启动模式]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/122892532</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/122892532</guid><author>ymeddmn</author><pubDate>Sat, 12 Feb 2022 09:47:25 +0800</pubDate><description><![CDATA[关于启动模式
我们都知道在activity体系中是有多种启动模式的：standard、singleTop、singleInstance、singleTask四种。但是在compose中因为是单activity所以自然是没有启动模式的说法的，因此本文我使用一些NavHostController的一些api来实现启动模式中的效果。
standard
默认的效果就是standard的效果
singleTop
compose中我们可以通过判断顶部的页面是否是我们要启动的singleTop页面来处理。
如果顶部页面是]]></description><category></category></item><item><title><![CDATA[使用Compose实现淘票票选择电影座位的效果]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/122892437</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/122892437</guid><author>ymeddmn</author><pubDate>Sat, 12 Feb 2022 09:42:11 +0800</pubDate><description><![CDATA[关注公众号学习更多知识

这是一篇去年就写好的博客
起因
新年要来了，看电影是我们新年中必不可少的娱乐项目，那么看电影的时候你是否有想过选座位的空间是如何实现的呢，座位优秀的程序员，我就想到了，今天就带你研究。
compose的绘制系列在两个月前就已经学习完成了，但是仅限于api的熟练，因此今天打算做一个仿淘票票选电影座位的自定义ui。
效果查看
先看一下支付宝客户端的实现吧

我们发现选座位的主要点就是座位的绘制、选择座位的逻辑、双指手势缩放、单指长按后拖动效果。所以关键就是这几个效果的实现
说到这里了提]]></description><category></category></item><item><title><![CDATA[Compose中SnackerBar的使用]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/122393184</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/122393184</guid><author>ymeddmn</author><pubDate>Sun, 09 Jan 2022 14:08:51 +0800</pubDate><description><![CDATA[代码
 val scope = rememberCoroutineScope()
    val scaffoldState = rememberScaffoldState()
    Scaffold(snackbarHost = {
        SnackbarHost(hostState = it) { data -&gt;
//            Snackbar(
//                snackbarData = data,
//                backgr]]></description><category></category></item><item><title><![CDATA[android事件流程图]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/122279499</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/122279499</guid><author>ymeddmn</author><pubDate>Sun, 02 Jan 2022 19:26:50 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[Compose中下拉框的使用]]></title><link>https://blog.youkuaiyun.com/ymeddmn/article/details/122265734</link><guid>https://blog.youkuaiyun.com/ymeddmn/article/details/122265734</guid><author>ymeddmn</author><pubDate>Sat, 01 Jan 2022 10:36:17 +0800</pubDate><description><![CDATA[代码

val datas = mutableListOf(
    "西瓜",
    "苹果",
    "芝麻",
    "狗熊"
)
    "西瓜",
    "苹果",
    "芝麻",
    "狗熊"
)


 DropdownMenu(expanded = true, onDismissRequest = {

        }, modifier = Modifier.width(100.dp)) {
            datas.forEach {
            ]]></description><category></category></item></channel></rss>