<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[coder_yao的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/coder_yao</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; coder_yao]]></copyright><item><title><![CDATA[Kotlin学习-集合和序列（3）]]></title><link>https://blog.csdn.net/coder_yao/article/details/120112647</link><guid>https://blog.csdn.net/coder_yao/article/details/120112647</guid><author>coder_yao</author><pubDate>Sun, 05 Sep 2021 14:03:55 +0800</pubDate><description><![CDATA[前面两篇我们学习了 Kotlin 学习-基础语法（1）和Kotlin学习-函数的定义和调用（2）
这次来看下kotlin中的集合和序列。
1.集合
1.1 集合的写法
首先我们来看下kotlin中集合的几种写法，如下：
private fun testList() {
    val list1 = listOf(1, 2, 3)
    val list2 = mutableListOf(4, 5, 6)

    println("list1 = $list1")
    println("list2 ]]></description><category></category></item><item><title><![CDATA[android app图标长按展示快捷方式 Shortcuts 类似3d touch]]></title><link>https://blog.csdn.net/coder_yao/article/details/119513000</link><guid>https://blog.csdn.net/coder_yao/article/details/119513000</guid><author>coder_yao</author><pubDate>Sun, 08 Aug 2021 13:39:11 +0800</pubDate><description><![CDATA[android 长按图标展示快捷方式
首先，这不是一个新功能了，在android 7.1的时候就已经支持创建快捷入口了。因为当时项目用不到也没关注过这块，现在很多应用都支持长按展示快捷入口了，确实有必要对这块了解下了。
1. 静态创建
静态创建比较适合常用的快捷方式不怎么变的情况。

在AndroidManifest.xml 清单文件中找到应用程序的入口，也就是 intent 过滤器设置为 android.intent.action.MAIN 操作和 android.intent.category.LAUN]]></description><category></category></item><item><title><![CDATA[RxJava原理分析]]></title><link>https://blog.csdn.net/coder_yao/article/details/116139834</link><guid>https://blog.csdn.net/coder_yao/article/details/116139834</guid><author>coder_yao</author><pubDate>Sun, 25 Apr 2021 22:38:17 +0800</pubDate><description><![CDATA[文章目录RxJava 的核心思想的理解？订阅流程1. Observer 源码2. Observable 创建过程3. subscribe 订阅过程4. 操作符 - map线程切换1. subscribeOn2. observeOn总结订阅流程线程切换
RxJava 的核心思想的理解？
​		有一个起点和一个终点，起点开始流向我们的“事件”，把事件流向终点，只不过在流的过程中可以增加拦截，对“事件”进行改变，终点只关心它的上一个流程。
RxJava的核心：订阅流程、线程切换。

源码基于 io.reactiv]]></description><category></category></item><item><title><![CDATA[android面试题相关]]></title><link>https://blog.csdn.net/coder_yao/article/details/115878923</link><guid>https://blog.csdn.net/coder_yao/article/details/115878923</guid><author>coder_yao</author><pubDate>Tue, 20 Apr 2021 00:47:33 +0800</pubDate><description><![CDATA[文章目录1. Dalvik 和 ART 的区别？2. Bitmap 优化？3. Bundle 用来传递数据，为什么不用 HashMap取代？4. 广播和EventBus的区别？5. 什么是 SurfaceView？6. 什么是Activity,Window,view?
1. Dalvik 和 ART 的区别？

Dalvik 每次运行都需要把字节码即时编译成机器码(JIT)；ART 会在安装时把字节码预编译成机器码，使其成为真正的本地应用。
ART 占用空间比Dalvik 大，大约（10%~20%），用空间]]></description><category></category></item><item><title><![CDATA[Android 注解和反射实践]]></title><link>https://blog.csdn.net/coder_yao/article/details/115675919</link><guid>https://blog.csdn.net/coder_yao/article/details/115675919</guid><author>coder_yao</author><pubDate>Tue, 13 Apr 2021 19:13:59 +0800</pubDate><description><![CDATA[Android 注解和反射实践
上篇说了 Java 自定义注解，这里来看下自定义注解和反射结合的实践例子
这里我们需要做到两点：

A页面intent传递数据并跳转到B 页面，通过注解和反射实现数据的自动赋值
通过注解和反射实现Activity页面的findViewById()功能和onClick()功能

数据自动赋值
首先来看下我们需要达到的效果：
public class SecondActivity extends AppCompatActivity {

    @GetParam(value =]]></description><category></category></item><item><title><![CDATA[Glide缓存机制]]></title><link>https://blog.csdn.net/coder_yao/article/details/115648779</link><guid>https://blog.csdn.net/coder_yao/article/details/115648779</guid><author>coder_yao</author><pubDate>Tue, 13 Apr 2021 00:12:56 +0800</pubDate><description><![CDATA[文章目录缓存机制加载流程LRU 机制总结

上一篇文章介绍了Glide的源码解析 的主线流程，这里说下Glide的缓存机制。

缓存机制加载流程
Glide 的缓存层级包括：
活动缓存：存放所有正在访问的图片。
内存缓存（LRU）、磁盘缓存（LRU）、模型model（网络，io）。
Glide的整体缓存流程如下：

页面加载图片时，先去活动缓存获取。如果有直接加载；
如果活动缓存没有，则从内存缓存获取。如果有，则把内存缓存中的图片拿到活动缓存，然后再去加载；
如果内存缓存没有，则去磁盘缓存中获取。如果有，则]]></description><category></category></item><item><title><![CDATA[Glide源码解析]]></title><link>https://blog.csdn.net/coder_yao/article/details/115605951</link><guid>https://blog.csdn.net/coder_yao/article/details/115605951</guid><author>coder_yao</author><pubDate>Sun, 11 Apr 2021 20:51:21 +0800</pubDate><description><![CDATA[Glide 源码解析

文章目录Glide 源码解析Glide流程简化图问题withLoadinto总结

当源码量大难懂的时候，看源码的思路：

只管主线，不管支线，不管支线，不管支线！
重点在主线，稍微瞄一眼支线。
稍微分析支线，回顾主线。
分析支线细节，回顾主线。
分析支线细节，寻找答案。


Glide.with(this).load(url).into(imageView).



with 创建一个空白的Fragment，来管理生命周期。


load  创建一个RequestBuilder对象]]></description><category></category></item><item><title><![CDATA[Java自定义注解]]></title><link>https://blog.csdn.net/coder_yao/article/details/115529410</link><guid>https://blog.csdn.net/coder_yao/article/details/115529410</guid><author>coder_yao</author><pubDate>Fri, 09 Apr 2021 10:34:34 +0800</pubDate><description><![CDATA[文章目录自定义注解元注解@Target@Retention@Documented@Inherited自定义注解使用

在开发中一些第三方框架经常会使用一些注解来实现功能，项目中也经常会使用到一些注解需要自己去自定义。
一般情况下自定义注解会与反射或者动态代理结合使用，这里先整理一下注解相关的东西。

自定义注解
首先先看下一个常规的自定义注解长什么样子：
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RU]]></description><category></category></item><item><title><![CDATA[Java 泛型]]></title><link>https://blog.csdn.net/coder_yao/article/details/115486861</link><guid>https://blog.csdn.net/coder_yao/article/details/115486861</guid><author>coder_yao</author><pubDate>Wed, 07 Apr 2021 15:33:22 +0800</pubDate><description><![CDATA[文章目录泛型类和泛型方法限定符1. &lt;? extends T&gt;2. &lt;? super T&gt;总结
泛型类和泛型方法
首先看下Java的正常的泛型的类和泛型方法的写法：
/**
 * 泛型类
 */
class Generic&lt;T&gt; {
    private T data;

    /**
     * 返回值是泛型的普通方法
     */
    public T getData() {
        return data;
    }

    /**
    ]]></description><category></category></item><item><title><![CDATA[Kotlin学习-函数的定义和调用（2）]]></title><link>https://blog.csdn.net/coder_yao/article/details/115296911</link><guid>https://blog.csdn.net/coder_yao/article/details/115296911</guid><author>coder_yao</author><pubDate>Mon, 29 Mar 2021 15:31:07 +0800</pubDate><description><![CDATA[文章目录1. 函数默认参数值2. 顶层函数和属性2.1 顶层函数2.2 顶层属性3. 扩展函数和属性3.1 扩展函数3.2 扩展属性4. 局部函数
上篇我们学习了 Kotlin 学习-基础语法（1）
现在来看下kotlin的函数定义和调用又怎样的区别。
1. 函数默认参数值
在Java中普遍存在的一个问题就是，一些类的重载函数太多，尤其是参数多的时候。
而在kotlin中可以在声明函数的时候指定默认参数值，这样可以避免创建重载的函数。
如下面的例子：
fun getString(a: String, b: ]]></description><category></category></item><item><title><![CDATA[Android 10 触控条出现大白条的问题]]></title><link>https://blog.csdn.net/coder_yao/article/details/115252731</link><guid>https://blog.csdn.net/coder_yao/article/details/115252731</guid><author>coder_yao</author><pubDate>Fri, 26 Mar 2021 18:57:34 +0800</pubDate><description><![CDATA[从 Android 10（API 级别 29）开始，Android 系统支持完全基于手势的导航。为确保应用与此功能兼容，应用开发者应完成以下两项任务：

将应用内容扩展到屏幕边缘。
处理存在冲突的应用手势。

例如小米8手机上，屏幕的的下方会出现触控条独占一个空间，你设置的全屏页面无法覆盖到触控条区域，
为了能够将视图放置到屏幕边缘，应用必须告知系统它可以处理此类视图。为此，可以使用 View.setSystemUiVisibility() 来设置以下标记：
SYSTEM_UI_FLAG_LAYOUT_ST]]></description><category></category></item><item><title><![CDATA[Kotlin 学习-基础语法（1）]]></title><link>https://blog.csdn.net/coder_yao/article/details/115212570</link><guid>https://blog.csdn.net/coder_yao/article/details/115212570</guid><author>coder_yao</author><pubDate>Fri, 26 Mar 2021 17:50:44 +0800</pubDate><description><![CDATA[为什么要用kotlin
首先，看看Android开发者中心的回答：


富有表现力且简洁：您可以使用更少的代码实现更多的功能。表达自己的想法，少编写样板代码。在使用 Kotlin 的专业开发者中，有 67% 的人反映其工作效率有所提高。
更安全的代码：Kotlin 有许多语言功能，可帮助您避免 null 指针异常等常见编程错误。包含 Kotlin 代码的 Android 应用发生崩溃的可能性降低了 20%。
可互操作：您可以在 Kotlin 代码中调用 Java 代码，或者在 Java 代码中调用 Kotl]]></description><category></category></item><item><title><![CDATA[Android两个app间跳转-deepLink的使用]]></title><link>https://blog.csdn.net/coder_yao/article/details/108556321</link><guid>https://blog.csdn.net/coder_yao/article/details/108556321</guid><author>coder_yao</author><pubDate>Sat, 12 Sep 2020 23:36:35 +0800</pubDate><description><![CDATA[在开发过程中，经常会遇到两个app之间跳转、或者浏览器链接跳转app的需求，这里简单总结一下。

1.简单的从一个app跳转到另一个app
直接用intent就可以实现。
只要知道目标activity的包名和类名就可以直接跳转了。

/**
     * 方法1：intent的显式跳转
     */
    private fun jumpDemo2() {
        val intent = Intent()
        intent.component = ComponentName("c.]]></description><category></category></item><item><title><![CDATA[Android开发使用Gradle实现多渠道打包]]></title><link>https://blog.csdn.net/coder_yao/article/details/95666344</link><guid>https://blog.csdn.net/coder_yao/article/details/95666344</guid><author>coder_yao</author><pubDate>Fri, 12 Jul 2019 23:41:25 +0800</pubDate><description><![CDATA[上篇文章《Android 如何使用gradle.properties》
记录了如何使用gradle.properties实现与build.gradle之间的配置与交互。这篇文章来看下如何用build.gradle实现多渠道打包。

我们知道打包的流程包括：签名配置、渠道配置、构建几个方面。通常App发布的时候会根据产品以及运营的需求对每个应用商店的渠道进行区分，需要打无数个包，那岂不是疯了？
那...]]></description><category></category></item><item><title><![CDATA[Android 如何使用gradle.properties]]></title><link>https://blog.csdn.net/coder_yao/article/details/95452483</link><guid>https://blog.csdn.net/coder_yao/article/details/95452483</guid><author>coder_yao</author><pubDate>Thu, 11 Jul 2019 10:17:34 +0800</pubDate><description><![CDATA[build.gradle使用gradle.properties配置相关信息

首先build.gradle有哪些常见的参数可以应用到gradle.properties呢？
以最常见举例：applicationId，versionCode，versionName
在gradle.properties中代码

APPLICATION_ID=com.example.multi
VERSION_CODE=...]]></description><category></category></item><item><title><![CDATA[android最简单的生成二维码demo]]></title><link>https://blog.csdn.net/coder_yao/article/details/52230289</link><guid>https://blog.csdn.net/coder_yao/article/details/52230289</guid><author>coder_yao</author><pubDate>Wed, 17 Aug 2016 13:53:33 +0800</pubDate><description><![CDATA[最简单的android二维码生成的demo]]></description><category></category></item><item><title><![CDATA[android图形验证码]]></title><link>https://blog.csdn.net/coder_yao/article/details/51832706</link><guid>https://blog.csdn.net/coder_yao/article/details/51832706</guid><author>coder_yao</author><pubDate>Tue, 05 Jul 2016 16:34:40 +0800</pubDate><description><![CDATA[android图形验证码随机生成的工具类]]></description><category></category></item><item><title><![CDATA[解决三星调用系统相机拍照显示图片旋转90度横着的问题]]></title><link>https://blog.csdn.net/coder_yao/article/details/51829210</link><guid>https://blog.csdn.net/coder_yao/article/details/51829210</guid><author>coder_yao</author><pubDate>Tue, 05 Jul 2016 10:16:55 +0800</pubDate><description><![CDATA[三星调用系统相机拍照显示图片是横着的问题解决]]></description><category></category></item><item><title><![CDATA[PopupWindow常见问题]]></title><link>https://blog.csdn.net/coder_yao/article/details/51822312</link><guid>https://blog.csdn.net/coder_yao/article/details/51822312</guid><author>coder_yao</author><pubDate>Mon, 04 Jul 2016 17:17:21 +0800</pubDate><description><![CDATA[popup点击外部或返回键取消 //popupwindow点击外部和返回键消失
		mPopup.setFocusable(true);//如果没有这句返回键后窗体泄露
		ColorDrawable dw = new ColorDrawable(0x00000000);
		mPopup.setBackgroundDrawable(dw);
		mPopup.setOutsideTouchabl]]></description><category></category></item></channel></rss>