<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wfeii的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wfeii</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wfeii]]></copyright><item><title><![CDATA[Android坐标系及View的位置信息]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/114658436</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/114658436</guid><author>wfeii</author><pubDate>Fri, 12 Mar 2021 09:41:40 +0800</pubDate><description><![CDATA[​View中有很多方法，getTop，getLeft，getX，getScrollX，getY，getScaleX，getTranslationX等等。它们获取的到底是什么意思呢？
Android坐标系
在Android坐标中，左上角原点，水平向右为X轴，竖直向下为Y轴，垂直屏幕向上是Z轴。不管横屏还是竖屏均是此逻辑。
View的位置信息
ViewA移动到ViewA’后的位置关系，如下图：

View中的位置信息有两点很重要：


位置信息是相对于父布局


获取的位置信息均是像素


View的基本信息：]]></description><category></category></item><item><title><![CDATA[Java中的引用类型]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/114383965</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/114383965</guid><author>wfeii</author><pubDate>Sun, 07 Mar 2021 18:02:23 +0800</pubDate><description><![CDATA[强引用
弱引用
软引用
虚引用

]]></description><category></category></item><item><title><![CDATA[创建性设计模式]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/113920465</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/113920465</guid><author>wfeii</author><pubDate>Sun, 21 Feb 2021 22:18:30 +0800</pubDate><description><![CDATA[创建性设计模式抽象了对象的实例化过程。它们帮助系统与系统使用的对象的创建解耦。创建性模式可以通过继承来改变实例化的类（工厂方法），也可以通过委托来实例化对象（抽象工厂，工厂方法，Builder）。]]></description><category></category></item><item><title><![CDATA[工厂相关的模式-简单工厂，工厂方法，抽象工厂]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/113695138</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/113695138</guid><author>wfeii</author><pubDate>Sun, 21 Feb 2021 22:07:27 +0800</pubDate><description><![CDATA[工厂模式是在创建对象与使用之间添加中间层，从而解耦对象的使用与对象的创建，
工厂模式有三种：
简单工厂 ： 通过类型创建不同的类的实现，类型可以是枚举，也可以是字符串，或者通过反射来实现。
工厂方法 ：每种产品类均对应一个工厂类，从而只依赖特定的工厂类。
抽象工厂：与工厂方法相似，但是抽象工厂基本使用在一组产品类的问题上。


...]]></description><category></category></item><item><title><![CDATA[Builder模式]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/113876527</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/113876527</guid><author>wfeii</author><pubDate>Sun, 21 Feb 2021 16:35:34 +0800</pubDate><description><![CDATA[将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以构建不同的表示。也就是说构建对象的过程相同，但是对象的行为却不同。]]></description><category></category></item><item><title><![CDATA[原型模式]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/113847214</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/113847214</guid><author>wfeii</author><pubDate>Sun, 21 Feb 2021 15:00:11 +0800</pubDate><description><![CDATA[原型模式顾名思义就是以一个对象为基础复制出一个新的对象。。]]></description><category></category></item><item><title><![CDATA[可重用性，可维护性，可读性，可测试性，可用性，健壮性]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/113844641</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/113844641</guid><author>wfeii</author><pubDate>Fri, 19 Feb 2021 21:35:25 +0800</pubDate><description><![CDATA[可重用性，
可维护性，
可读性，
可测试性，
可用性，
健壮性]]></description><category></category></item><item><title><![CDATA[单例设计模式]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/113233710</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/113233710</guid><author>wfeii</author><pubDate>Thu, 18 Feb 2021 09:31:24 +0800</pubDate><description><![CDATA[什么是单例模式
单例模式：可以说是23种设计模式种最简单的模式了，是说类只有一个供全局访问的单个实例，类不能实例化。
这里有两个点：

类只有一个供全局访问的实例
类不能实例化

为什么使用单例模式
我们期望只提供类的实例供外部系统使用，节约内存。

注意事项：
单例类应该只提供读功能，不提供写功能，也就是说不提供相关的方法改变类实例的状态。
比如：

public class Singleton {  
    private static Singleton instance = new Singlet]]></description><category></category></item><item><title><![CDATA[Activity看这篇就够了]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/112094202</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/112094202</guid><author>wfeii</author><pubDate>Sun, 17 Jan 2021 19:19:47 +0800</pubDate><description><![CDATA[文章目录什么是Activity？怎么使用Activity？Activity的生命周期任务栈与Activity的启动方式Activity与ContextActivity与WindowActivity与View
什么是Activity？
怎么使用Activity？
Activity的生命周期
任务栈与Activity的启动方式
Activity与Context
Activity与Window
Activity与View
问题？

进程与任务栈的关系
任务栈与Activity的关系


...]]></description><category></category></item><item><title><![CDATA[RxJava如此简单]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/111937568</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/111937568</guid><author>wfeii</author><pubDate>Tue, 29 Dec 2020 21:30:40 +0800</pubDate><description><![CDATA[什么是RxJava
RxJava是ReactiveX的Java VM实现，用于通过使用可观察的序列来组成异步和基于事件的库。它扩展了观察者模式以支持数据和/或事件序列，并添加了运算符，便于数据处理。
为什么使用RxJava
使用Rxjava的原因主要是便捷的异步数据处理，以及方便的线程切换。
如何使用RxJava

引入RxJava库

implementation "io.reactivex.rxjava3:rxjava:3.0.8"
//可选
implementation "io.reactivex.r]]></description><category></category></item><item><title><![CDATA[面向对象的六大原则]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/84980411</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/84980411</guid><author>wfeii</author><pubDate>Wed, 09 Dec 2020 21:52:49 +0800</pubDate><description><![CDATA[面向对象的六大原则

单一职责原则
开闭原则
里氏替换原则
依赖倒置原则
接口隔离原则
迪米特原则

单一职责原则
对一个类而言，应该仅有一个引起它变化的原因。一个类应该相关性很高的封装。对于单一职责，定义类的职责是最大的问题，如何判定某个职责属于某个类呢？我们可以通过另一个GRASP中的来去间接说明职责分配的问题。那就是GRASP中的信息专家，
* 信息专家(Information Expert...]]></description><category></category></item><item><title><![CDATA[常见的编程范式-面向过程，面向对象，函数式编程，响应式编程]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/109854946</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/109854946</guid><author>wfeii</author><pubDate>Mon, 07 Dec 2020 21:44:58 +0800</pubDate><description><![CDATA[编程范型提供了程序员对程序执行的看法。例如，在面向对象编程中，程序是一系列相互作用的对象。在面向过程编程中，程序是一系列步骤的组合的过程，先执行那个步骤，然后执行那个步骤，最后在执行那个步骤。在面向函数式编程中，一个程序会被看作是一个无状态的函数计算的序列，函数可以作为参数，返回值。在响应式编程中，程序被看作是数据流和以及其传播的过程。
面向过程编程
使用过C语言，我们就能深刻体会面向过程编程。我们会把一个任务分成若干个步骤，先执行哪一步，然后执行哪一步，最后执行哪一步，就相当于生产线，吭哧吭哧执行完，任务]]></description><category></category></item><item><title><![CDATA[面向对象的基本原则-抽象，封装，继承，分解]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/109311253</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/109311253</guid><author>wfeii</author><pubDate>Mon, 07 Dec 2020 18:14:31 +0800</pubDate><description><![CDATA[封装
继承
多态
组合

]]></description><category></category></item><item><title><![CDATA[分辨率，屏幕尺寸，屏幕密度，dp，px，sp]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/110096947</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/110096947</guid><author>wfeii</author><pubDate>Tue, 24 Nov 2020 22:42:57 +0800</pubDate><description><![CDATA[我们在做UI时候经常遇到这几个概念，但是就是不知道他们之间的关系，这篇文章将会解惑。
像素：显示图像的基本单元，单位px
分辨率：是纵横向上的像素点数，单位是px，比如1920X1080说的是纵向有1920个像素点，横向有1080个像素点。
屏幕尺寸：是手机屏幕对角线的长度，单位为英寸。
屏幕像素密度：每单位的像素的点数，简称PPI（Pixels Per Inch），单位dpi（Dots Per Inch）。
上述的关系为
屏幕的像素密度=√（分辨率高² + 分辨率宽²）÷  屏幕尺寸。
例如：


...]]></description><category></category></item><item><title><![CDATA[使用MediaScannerConnection主动更新MediaStore]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/109517471</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/109517471</guid><author>wfeii</author><pubDate>Thu, 05 Nov 2020 18:42:27 +0800</pubDate><description><![CDATA[现象：在适配Android11迁移文件夹时，遇到一个问题。在Android11以下版本迁移多媒体文件成功后，我们使用SAF选择文件时，还是可以看到多媒体文件。但是多媒体文件已经不存在了。
原因：虽然我们的多媒体文件已经不存在了，但是MediaStore中的数据库还存在原来多媒体文件的数据。
解决方案：那我们刷新一下MediaStore中的数据库就可以了。可以通过MediaScannerConnection.scanFile静态方法来刷新。我这里封装了一下，传入目录或者文件都可行。我这里没有传如mimeTyp]]></description><category></category></item><item><title><![CDATA[一篇搞懂OOA/OOD/OOP的区别]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/109311110</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/109311110</guid><author>wfeii</author><pubDate>Sun, 01 Nov 2020 15:59:52 +0800</pubDate><description><![CDATA[此篇文章介绍OOA/OOD/OOP的区别。]]></description><category></category></item><item><title><![CDATA[刀哥咱俩探讨一下重构的手法]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/109399496</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/109399496</guid><author>wfeii</author><pubDate>Sat, 31 Oct 2020 10:53:07 +0800</pubDate><description><![CDATA[周一早上，竖三早早的来到了空无一人的办公区，坐在工位上百无聊赖。心里还在想着周末的王者荣耀十五连胜，暗暗窃喜，我TMD太厉害，尔等且是凯爹的对手，加油干保持二十连胜。咦对了，刀哥今天要给我说说如何消除代码坏味道，我赶紧学习，等他来了跟他交流交流。说干就干，打开电脑就看了起来。
不知不觉一个小时过去了。竖三伸伸懒腰，感觉收获颇丰。正好上周六才上线新版本，今天无事，找刀哥聊聊去。
“刀哥，上周六你说今天给我讲讲消除代码坏味道的方法。今天什么时候有时间咱俩探讨探讨。” 竖三说
“就现在吧，版本刚发，闲来无事。”
]]></description><category></category></item><item><title><![CDATA[来来竖三我跟你说说代码的坏味道]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/109399225</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/109399225</guid><author>wfeii</author><pubDate>Sat, 31 Oct 2020 10:44:09 +0800</pubDate><description><![CDATA[周六的清晨，光线照进了阴暗的办公室里，原本黑暗的室内瞬间变得透亮，定睛一看还能瞧见灰尘在光线中起舞。刀哥伸着懒腰，打着哈欠，项目终于在通宵中告一段落。刀哥不经意间瞥见了竖三，突然想起了上次跟他说的重构只说了一半，由于赶着项目上线，一直没时间跟他说另一半，正好今天项目完结了，我跟他讲讲。
刀哥站起身来，有气无力的走到竖三身边说：“三，上次欠你的重构的债还没还呢，今天我跟你说说代码的坏味道吧？”
竖三转头看着刀哥，两只眼睛似睁未睁，无力地说：“刀哥你饶了我吧，一宿没睡，我现在眼睛都睁不开了，我要回家躺尸了，改天]]></description><category></category></item><item><title><![CDATA[从面向对象到架构设计博客更新计划]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/109313722</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/109313722</guid><author>wfeii</author><pubDate>Tue, 27 Oct 2020 18:14:18 +0800</pubDate><description><![CDATA[写作计划
面向对象是我们使用面向对象语言的基础，它是一种思想，为了能写出更好的面向对象的必备技能。我会简要的说明面向对象常用内容。这个模块大概输出4～5篇左右的内容。

OOA，OOD，OOP的概念
面向对象设计的常见特征
面向对象设计的GRASP原则
面向对象设计的六大原则

接下来的我会输出常用的设计模式。此模块输出25篇左右，23篇设计模式，以及常用的MVP，MVC和MVVM各一篇。通过这块的学习，一方面我们可以使用前辈的经验，快速解决问题，另一方面学习设计模式的理念我们能更加熟悉面向对象设计与编码。]]></description><category></category></item><item><title><![CDATA[Android11适配-包可见性]]></title><link>https://blog.youkuaiyun.com/wfeii/article/details/109168097</link><guid>https://blog.youkuaiyun.com/wfeii/article/details/109168097</guid><author>wfeii</author><pubDate>Mon, 19 Oct 2020 20:19:05 +0800</pubDate><description><![CDATA[Android11的包可见性
我们的应用常常会碰到与其他应用交互，比如登录功能，我们可能希望使用微信登录或者QQ登录，再比如分享，我们先判断是否安装了微信，然后决定是否展示微信的分享图标等等。这里我们有一个需求就是获取相关的软件包是否已经安装。
但是在Android11中，除了默认的一些应用外，我们不能直接获取到软件包是否已经安装了，换句话说我们安装了一个应用，但是我们调用 getInstalledApplications() 或 getInstalledPackages()的可能没有返回此包名。这就是An]]></description><category></category></item></channel></rss>