<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[健忘的鱼的博客]]></title><description><![CDATA[路漫漫其修远兮，吾将上下而求索]]></description><link>https://blog.youkuaiyun.com/a1306500394</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; a1306500394]]></copyright><item><title><![CDATA[【Android】存储目录]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/142052599</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/142052599</guid><author>a1306500394</author><pubDate>Mon, 09 Sep 2024 10:46:53 +0800</pubDate><description><![CDATA[存储位置




代码
路径
位置




context.getFileDir
data/data/packagename/file
内部存储


context.getCacheDir
data/data/packagename/cache
内部存储


context.getExternalCacheDir
storage/emulated/0/Android/data/packagename/cache
外包存储私有目录


context.getExternaFilesDir
storage/em]]></description><category></category></item><item><title><![CDATA[【设计模式】策略、状态、命令模式]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/121795447</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/121795447</guid><author>a1306500394</author><pubDate>Fri, 12 Jan 2024 10:53:09 +0800</pubDate><description><![CDATA[策略、状态、命令模式

]]></description><category></category></item><item><title><![CDATA[【Android】Canvas 相关API]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/134799531</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/134799531</guid><author>a1306500394</author><pubDate>Tue, 05 Dec 2023 09:52:24 +0800</pubDate><description><![CDATA[【代码】【Android】Canvas 相关API。]]></description><category></category></item><item><title><![CDATA[【Android】音频可视化]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/133745782</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/133745782</guid><author>a1306500394</author><pubDate>Tue, 10 Oct 2023 14:23:16 +0800</pubDate><description><![CDATA[音频播放过程中的可视化，播放数据通过Visualizer分析得出fft数据，转换成float数组展示在界面上，优点：原生Api支持，使用简单；缺点：数据分析在jni层，不能个性化定义，音量为0时无数据返回，需麦克风权限。]]></description><category></category></item><item><title><![CDATA[【Android】Speex简易使用]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/132295870</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/132295870</guid><author>a1306500394</author><pubDate>Tue, 15 Aug 2023 12:20:18 +0800</pubDate><description><![CDATA[speex是主要用于音频压缩，降噪；减少原始数据体积，提升各端数据传输效率，最后一次更新是在2016年，已被opus代替，该篇旨在记录对speex在android上的使用过程。]]></description><category></category></item><item><title><![CDATA[【Android】蓝牙相关]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/131470647</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/131470647</guid><author>a1306500394</author><pubDate>Fri, 30 Jun 2023 10:22:40 +0800</pubDate><description><![CDATA[使用 BluetoothScanner 调用startScan进行扫描，扫描会持续进行，直到调用 stopScan,回调结果在ScanCallback的 onScanResult中，每次返回一条，需做去重操作。从服务中拿到特征，根据特征的通道类型建立连接，读写等会有不同的回调，需要绑定多个渠道。连接这里使用了第三方ViseBle，也可以自己实现。根据设备提供的服务码找到符合条件的。android 12以上声明。在回调中获取设备返回的数据。发出消息时建立消息的监听。]]></description><category></category></item><item><title><![CDATA[【Android】亚马逊简易使用]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/131121643</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/131121643</guid><author>a1306500394</author><pubDate>Fri, 09 Jun 2023 10:28:45 +0800</pubDate><description><![CDATA[亚马逊官网对Android端实现上传下载的操作十分复杂，其实大多数操作都是为了生成awsconfiguration.json的配置文件，但这个配置文件也只是提供了键值对初始值，并不是必须的，可以自己组建JSONObject赋值。]]></description><category></category></item><item><title><![CDATA[【Android】ContentProvider]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/129580412</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/129580412</guid><author>a1306500394</author><pubDate>Thu, 16 Mar 2023 10:19:31 +0800</pubDate><description><![CDATA[ContentProvider做为跨进程通信的手段之一，一般用于暴露本应用数据给到外部应用，提供一套标准的数据访问模型，常常与本地数据库联合使用。]]></description><category></category></item><item><title><![CDATA[【android Studio】打包]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/129447830</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/129447830</guid><author>a1306500394</author><pubDate>Fri, 10 Mar 2023 17:39:04 +0800</pubDate><description><![CDATA[model模块打包成jar包。]]></description><category></category></item><item><title><![CDATA[【Jectpack】WorkManager]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/129363591</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/129363591</guid><author>a1306500394</author><pubDate>Tue, 07 Mar 2023 10:15:45 +0800</pubDate><description><![CDATA[主要处理非及时性任务和定时的周期性任务，特点是保证任务一定执行但不一定立即执行，可以在应用退出后继续执行，用于替换部分前台服务的场景。]]></description><category></category></item><item><title><![CDATA[知识点专项整理]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/129027703</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/129027703</guid><author>a1306500394</author><pubDate>Mon, 20 Feb 2023 09:45:10 +0800</pubDate><description><![CDATA[动态代理的核心点在于代理对象实现InvocationHandler(即中介)，invoke函数实现调用，委托者实现委托的具体接口，代理对象初始化时传入接口对象，这样只要实现了该接口的对象都可以使用动态代理对象进行调用，接口对象在初始化时new的是具体的子类对象，这样实现了代理对象和实体对象的替换，这样好处在于当实现的模式主体更换时，调用的接口代码无需更换。管道：基于Unix系统，PIPE指匿名管道：半双工单向通讯，只能在父子，兄弟进程间通讯，数据量小，但无并发问题；APP（app运行的进程）]]></description><category></category></item><item><title><![CDATA[Java算法篇]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/128848023</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/128848023</guid><author>a1306500394</author><pubDate>Mon, 06 Feb 2023 16:28:32 +0800</pubDate><description><![CDATA[是在插入第i个元素时，对前面的0～i-1元素进行折半，先跟他们中间的那个元素比，如果小，则对前半再进行折半，否则对后半进行折半，直到left]]></description><category></category></item><item><title><![CDATA[【设计模式】责任链模式]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/122020750</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/122020750</guid><author>a1306500394</author><pubDate>Sun, 19 Dec 2021 17:55:42 +0800</pubDate><description><![CDATA[责任链模式理论模型实例实现场景分解实现定义拦截器接口实现链条，提供传递方法构建实例调用实践参考

该模式主要用于处理一系列在同类型事务上具有相关性的场景，典型的如OKHTTP中的拦截器，采用的就是该模式，每个拦截器决定是否拦截还是交给下一个拦截点，各点之间连接成链，之所以是链是因为有一个点断开（即被拦截）则整个事务结束。责任链模式主要解决了各拦截器之间不相互感知且能按顺序执行。

理论模型
interceptor 接口，传递拦截链，拦截点需实现的接口
chain 定义链条,责任链的核心实现，持有所有的拦截点]]></description><category></category></item><item><title><![CDATA[【Android】ConstraintLayout]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/121800765</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/121800765</guid><author>a1306500394</author><pubDate>Wed, 08 Dec 2021 23:16:51 +0800</pubDate><description><![CDATA[ConstraintLayout 约束布局使用引入控件边界约束chain链goneMargin偏移量biasView 尺寸constraintWidth 控制ratio 控制max min圆形布局辅助控件GuideLine 参考线Group 组Placeholder 占位控件Barrier 屏障

ConstraintLayout 现已做为布局的默认父布局，优点在于可以减少布局嵌套，大多数情况只要一个ConstraintLayout即可完成整个页面的布局，推荐用法是使用控件拖动的方式添加，连接约束线自动生成]]></description><category></category></item><item><title><![CDATA[【设计模式】代理，装饰，适配器]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/121791662</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/121791662</guid><author>a1306500394</author><pubDate>Wed, 08 Dec 2021 16:48:28 +0800</pubDate><description><![CDATA[结构型设计模式代理模式静态代理类图实现动态代理装饰器模式类图实现类适配器类图实现对象适配器类图实现实践参考
代理模式

代理模式目的是为外部访问者提供一个代理对象，使得外部访问者不直接访问某个对象的情况下，通过代理类访问对象方法，产生的缺点就是会延迟相应方法的访问，其用法可分为静态代理和动态代理

静态代理
类图

实现

被代理对象的对外接口

interface Service {
    fun visit()
}


被代理对象本体

class RealServer constructor( na]]></description><category></category></item><item><title><![CDATA[【设计模式】工厂模式]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/121784962</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/121784962</guid><author>a1306500394</author><pubDate>Wed, 08 Dec 2021 14:18:54 +0800</pubDate><description><![CDATA[工厂模式实现简单工厂模式类图实现方式定义产品接口子类实现产品接口工厂类根据用户需求返回具体产品(核心)适用性工厂方法模式类图实现方式定义抽象工厂接口（核心）子类实现工厂抽象用户根据具体的工厂获取具体产品适用性抽象工厂模式类图实现赋予抽象工厂更多的类别（核心）交由子类实现实例化工厂创建产品对象适用性总结实践参考

根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式，根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建，是一种创建型模式。

简单工厂模式

用户需要提供]]></description><category></category></item><item><title><![CDATA[【Jectpack】DataStore]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/121725452</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/121725452</guid><author>a1306500394</author><pubDate>Sun, 05 Dec 2021 19:26:06 +0800</pubDate><description><![CDATA[dataStore 是jectpack推出的轻量化存储组件，包含PreferenceDataStore和ProtoDataStore两种方式，基于Flow()实现数据存储

Why To Use
之前的Android轻量化存储组件SharedPreferences读写操作会阻塞主线程，在数据量不多的情况下没什么影响，但随着对组件的滥用，存储的数据量逐渐增大，性能问题逐渐显现，官方也挣扎着出了apply()异步化方案，希望挽救SharedPreferences于水火，但可惜apply()并未实现真正意义上的.]]></description><category></category></item><item><title><![CDATA[【Android】RXAndroid]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/121628301</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/121628301</guid><author>a1306500394</author><pubDate>Tue, 30 Nov 2021 15:49:19 +0800</pubDate><description><![CDATA[RXAndroid 起源于RXJava，体现了响应式的编程规范，可以方便地处理异步数据流，强调对数据的观察与处理的流程

一、使用
导入依赖
 implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
 implementation 'io.reactivex.rxjava3:rxjava:3.0.0'

GitHub地址：RxAndroid
核心API
Observable被观察者，事件由被观察者发出
Observer 观察者，事件由观察者接收
Subs.]]></description><category></category></item><item><title><![CDATA[【Jectpack】LifeCycle]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/121615480</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/121615480</guid><author>a1306500394</author><pubDate>Mon, 29 Nov 2021 22:29:47 +0800</pubDate><description><![CDATA[LifeCycle可以让本没有生命周期的对象通过实现LifecycleObserver或DefaultLifecycleObserver接口后也具有生命周期的特性


]]></description><category></category></item><item><title><![CDATA[【Kotlin】 基础语法篇]]></title><link>https://blog.youkuaiyun.com/a1306500394/article/details/121610034</link><guid>https://blog.youkuaiyun.com/a1306500394/article/details/121610034</guid><author>a1306500394</author><pubDate>Mon, 29 Nov 2021 17:34:03 +0800</pubDate><description><![CDATA[记录些容易遗忘或易混淆的语法结构和关键字

关键字
vararg函数的变长参数
$用于字符串模板中变量名或变量值
is类型检测
in区间判断
inner 修饰内部类，内部类可以用this@Class来获取外部类对象，外部类通过对象调用内部类方法，不用inner修饰的类但写在内部称为嵌套类，外部类通过静态调用获取嵌套类对象，嵌套类不可通过this获取外部类对象
internal同模块内可见
sealed修饰密封类，类似于枚举，结合when条件语句使用，可列举出类的所以情况而不写else，这点比普通的swit.]]></description><category></category></item></channel></rss>