<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xiaxiayige的专栏]]></title><description><![CDATA[好记性不如烂笔头]]></description><link>https://blog.youkuaiyun.com/xiaxiayige</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xiaxiayige]]></copyright><item><title><![CDATA[Flutter插件开发踩坑记]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/115078747</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/115078747</guid><author>xiaxiayige</author><pubDate>Mon, 22 Mar 2021 14:49:18 +0800</pubDate><description><![CDATA[1.集成其他Flutter插件遇到的问题之一（Missing ‘package’ key）（Android）
问题描述：
D:\flutterSdk\flutter\.pub-cache\hosted\pub.flutter-io.cn%47\wechat_kit-2.0.0\android\src\main\AndroidManifest.xml:6:9-50 Error:

Missing 'package' key attribute on element package at AndroidMani]]></description><category></category></item><item><title><![CDATA[Flutter开发小技巧]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/110919601</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/110919601</guid><author>xiaxiayige</author><pubDate>Wed, 09 Dec 2020 11:45:59 +0800</pubDate><description><![CDATA[0 前言
本文测试机型为: 小米10，红米7 

开发环境为：

Flutter 1.20.4 • channel stable • https://github.com/flutter/flutter.git
Framework • revision fba99f6cf9 (3 months ago) • 2020-09-14 15:32:52 -0700
Engine • revision d1bc06f032
Tools • Dart 2.9.2

目录
1.实现沉浸状态栏
2.禁止横竖屏切换
3.字]]></description><category></category></item><item><title><![CDATA[使用LiveData+Retrofit,实现具有生命周期的网络请求]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/109511795</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/109511795</guid><author>xiaxiayige</author><pubDate>Thu, 05 Nov 2020 14:40:57 +0800</pubDate><description><![CDATA[（本文代码示例采用Kotlin编写）
1. 前言
此前我们一直是使用RxJava+Retrofit实现网络请求，直接使用这种请求方式是没有和Activity或Fragment的生命周期绑定的，就容易出现内存泄漏或者程序崩溃的情况。因此通常还会加上一个RxlifeCycle来保证和我们的生命周期绑定就变成了RxJava+Retrofit+RxLifeCycle这种结构了，但是自从Android官方推出了LiveData组件，因为LiveData是带有生命周期属性的，我们就可以抛弃原来的写法，来创造属于自己的一]]></description><category></category></item><item><title><![CDATA[关于Kotlin，你不知道的那些事（一）------inline，noinline，crossinline]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/106906525</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/106906525</guid><author>xiaxiayige</author><pubDate>Mon, 22 Jun 2020 17:37:07 +0800</pubDate><description><![CDATA[1.inline
相信大家很多在写kotlin代码的时候都看到过这样的关键字,比如常见的let，with，apply，also，但是大家又是否知道代表了什么含义呢，加了inline的方法能调用，不加inline关键字的方法也能调用，那这个关键字到底有什么作用呢？接下来我们通过实例来分析一下。
我们写一个测试类来分析。
fun main(args: Array&lt;String&gt;) {

    val result = sum(1, 2)

    print("result = $result")]]></description><category></category></item><item><title><![CDATA[开发技巧之 (Flutter) Dart扩展方法的使用]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/106780895</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/106780895</guid><author>xiaxiayige</author><pubDate>Tue, 16 Jun 2020 09:40:12 +0800</pubDate><description><![CDATA[#Tips （Flutter）Dart扩展方法的应用
在kotlin中，我们可以通过编写自己的扩展方法，来复用一些常用的方法调用，这样能够快速的进行迭代开发，并且用起来也舒服，在Dart中有没有这样的方法可以操作呢，答案当然是有咯 ，但是这也只有在dart2.7版本才能够使用。
如果大家用Flutter开发， 可以看看自己的dart版本是否能够支持扩展方法呢。
flutter --version

参考链接：extension-methods
例1-字符串打印
比如我们要打印日志之类的方法，我们传统的方法就]]></description><category></category></item><item><title><![CDATA[开发技巧之Android打包自动命名]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/106687819</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/106687819</guid><author>xiaxiayige</author><pubDate>Thu, 11 Jun 2020 14:18:30 +0800</pubDate><description><![CDATA[Tips-Gradle 打包自动命名
一般的，我们构建运行App的时候，通常会在build/output文件夹下面生成一个app-debug.apk 或者app-release.apk,这样如果不做修改的拷贝到了其他地方或者发给别人，过后再看这个名称的apk文件，我们很难一眼就知道这是一个什么文件，是哪个版本的文件。
所以这里我们通过Gradle提供给我们的一些方法属性，我们可以自己定义文件输出的命名规则，这里给出一份简单的规则，大家可以根据自己的需要添加修改。
这里我们想要的命名规则比如是：微信_9.5.]]></description><category></category></item><item><title><![CDATA[Android学习------一教就会的Android换肤实现]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/106614393</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/106614393</guid><author>xiaxiayige</author><pubDate>Mon, 08 Jun 2020 10:56:33 +0800</pubDate><description><![CDATA[1.前言
说到换肤，大家并不陌生，淘宝，京东等App一到节假日就会换上一身新衣服，当然里面还会有一些皮肤提供给你自己下载应用。
换肤和常见的暗黑模式明亮模式有点类似，但是这种模式大多数是通过更改主题的方式来实现的，当我们要实现一些比较复杂的，
比如给某个按钮，文本更换添加背景图片，更改字体字好大小等操作就不是很方便了。今天要将的就是如何实现自定义换肤。

2.需求
产品要求App内部需要根据不同的节假日或者根据24节气App里面的图标背景，字体颜色样式需要有不一样的变化。

2.1 分析需求
根据上面的需求]]></description><category></category></item><item><title><![CDATA[Flutter开发者必知必会的十个开发小技巧]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/105226951</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/105226951</guid><author>xiaxiayige</author><pubDate>Tue, 31 Mar 2020 17:18:11 +0800</pubDate><description><![CDATA[0 前言
SafeArea
Wrap
RichText
ClipRRect
MediaQuery
FutureBuilder
Flexible  
SizedBox
Aligin
Divider

如果上面的组件你能够熟练使用，那么就可以关闭此页面去开心的玩耍啦。如果你不清楚他们有什么用法，那么久往下看吧。每一个都有代码示例哦。
Tips 1 - SafeArea
直通车 https://api....]]></description><category></category></item><item><title><![CDATA[Android AOP，从需求到实战（AspectJ）]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/103682807</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/103682807</guid><author>xiaxiayige</author><pubDate>Tue, 24 Dec 2019 14:45:07 +0800</pubDate><description><![CDATA[推荐链接：https://blog.youkuaiyun.com/Innost/article/details/49387395
1.前言
关于OOP和AOP的区别介绍，本文就不再详细阐述了，一种是面向对象编程，一种是面向切面编程。从编码思想上有些不太一样。下面我们直接从实战操作中来学习Android中的AOP
2.需求
2.1 需要给每个方法加上日志打印
我们先写一段代码 作为基础代码，我们在此之上 加上我...]]></description><category></category></item><item><title><![CDATA[代码优化------Snackbar内存泄漏分析及解决]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/103529199</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/103529199</guid><author>xiaxiayige</author><pubDate>Fri, 13 Dec 2019 16:12:00 +0800</pubDate><description><![CDATA[SnckBar内存泄漏分析及解决
1 分析工具
MemoryAnalyzer（MAT）

2 问题代码
 fun initView() {

	/*** 省略 ****/
    mSnackbar = Snackbar.make(view, "确定要退出吗？", Snackbar.LENGTH_LONG)
        mSnackbar!!.setAction("确定") { v -&gt;...]]></description><category></category></item><item><title><![CDATA[Rxjava温故知新（十）------100行代码实现RxJava的Observable.create（简版）]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/102938572</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/102938572</guid><author>xiaxiayige</author><pubDate>Wed, 06 Nov 2019 16:58:07 +0800</pubDate><description><![CDATA[1.前言
前面讲解了一些操作符的使用，现在我们看一下部分源码，实现一个简单版本Rxjava的Observable.create到订阅的动作。

2.实现简版RxJava
2.1 代码分析
首先我们来看看RxJava里面的源码走向是怎么的，从Observable.create到subscribe里面做了些什么操作，最后消息会发送到我们的观察者里面
我们知道RxJava Observable是一个被观...]]></description><category></category></item><item><title><![CDATA[Rxjava温故知新（九）------Java泛型和PECS]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/102895457</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/102895457</guid><author>xiaxiayige</author><pubDate>Mon, 04 Nov 2019 14:08:44 +0800</pubDate><description><![CDATA[相关文章推荐
1.https://stackoverflow.com/questions/4343202/difference-between-super-t-and-extends-t-in-java
2.https://howtodoinjava.com/java/generics/java-generics-what-is-pecs-producer-extends-consumer-sup...]]></description><category></category></item><item><title><![CDATA[Rxjava温故知新（八）------背压模式]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/102895197</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/102895197</guid><author>xiaxiayige</author><pubDate>Mon, 04 Nov 2019 13:55:02 +0800</pubDate><description><![CDATA[1.操作符

onErrorResumeNext
onErrorReturn
onExceptionResumeNext

2.操作符案例
2.1 onErrorResumeNext
说明
拦截发射的异常  ,能够处理 throw Exception级别的异常，能够接收异常消息，需要返回一个新的Observable，执行发送 ，不能处理 throw Error级别异常

例子
Observable...]]></description><category></category></item><item><title><![CDATA[Rxjava温故知新（七）------RxJava异常型操作符]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/102792707</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/102792707</guid><author>xiaxiayige</author><pubDate>Tue, 29 Oct 2019 09:15:33 +0800</pubDate><description><![CDATA[Rxjava温故知新（七）------RxJava合并型操作符
1.操作符

onErrorResumeNext
onErrorReturn
onExceptionResumeNext

2.操作符案例
2.1 onErrorResumeNext
说明
拦截发射的异常  ,能够处理 throw Exception级别的异常，能够接收异常消息，需要返回一个新的Observable，执行发送 ，不能处...]]></description><category></category></item><item><title><![CDATA[Rxjava温故知新（六）------RxJava合并型操作符]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/102726232</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/102726232</guid><author>xiaxiayige</author><pubDate>Thu, 24 Oct 2019 16:28:24 +0800</pubDate><description><![CDATA[1.操作符列表

startWith
concatWith
merge
zip

2.操作符案例
2.1 startWith
说明
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cMEwYULU-1571905690955)(9.png)]
先发射 2和3，然后再通过startWith（1），最后输出 1， 2 3 .说明startWith中的内容先输出

例子
 ...]]></description><category></category></item><item><title><![CDATA[Rxjava温故知新（五）------RxJava条件型操作符]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/102696700</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/102696700</guid><author>xiaxiayige</author><pubDate>Wed, 23 Oct 2019 10:32:02 +0800</pubDate><description><![CDATA[1.前言
条件型操作符，判断类型，向下游发送布尔类型的数据


all
any
contains
isEmpty

2.条件型操作符
2.1 all
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sqwCIQ3m-1571797880276)(8.png)]
说明
all条件操作符，类似于And（与）条件，上游发射的所有数据都会经过判断， 一个条件为false 最后...]]></description><category></category></item><item><title><![CDATA[Rxjava温故知新（四）------RxJava操作符之过滤型操作符]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/102695039</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/102695039</guid><author>xiaxiayige</author><pubDate>Wed, 23 Oct 2019 09:17:35 +0800</pubDate><description><![CDATA[1.前言
过滤型操作符主要就是为了方面我们过滤一些自己的想要的数据，就字面意思。


filter
take
distint
elementAt

2.过滤型操作符
##2.1 filter
说明
filter操作符返回的是一个布尔类型的值，根据自己的条件逻辑判断返回可以达到你想要的结果

举例 （打印出年龄大于4的User）
写法1
 User user1 = new User("111", 1...]]></description><category></category></item><item><title><![CDATA[Rxjava温故知新（三）------RxJava操作符之变换型操作符]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/102625491</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/102625491</guid><author>xiaxiayige</author><pubDate>Fri, 18 Oct 2019 14:53:13 +0800</pubDate><description><![CDATA[1.前言
由于Rxjava是一个变种的观察者设计模式，前面也已经说过了，Rxjava的设计是 一个开始节点，一个结束节点。
但是由于Rxjava提供了很多方便的操作符，使得我们的被观察着把数据发送到观察者的途中，我们可以对被观察着进行变形修改。

Rxjava是一个流式的API集合，所以我们可以通过一条线的方式梳理我们的逻辑,有可能会有多次变换操作，最终拿到想要的结果

画个草图

接下来讲讲常见...]]></description><category></category></item><item><title><![CDATA[Rxjava温故知新（二）------RxJava操作符之创建型操作符]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/102605154</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/102605154</guid><author>xiaxiayige</author><pubDate>Thu, 17 Oct 2019 13:48:49 +0800</pubDate><description><![CDATA[前言
上一篇文章降到了Rxjava是一个起点和一个终点的模式，那么这个概念大家一定要记住，起点就是被观察者，终点就是观察者。

还需要通过订阅（subscribe）把2者建立关系。

1.常见创建型操作符

create
just
fromArray
empty
range

2.操作符代码示例
2.1 create操作符 （应用场景 -多）
说明
通过create创建一个观察者 Observab...]]></description><category></category></item><item><title><![CDATA[Rxjava温故知新（一）------ 传统观察者模式和RxJava观察者模式的区别]]></title><link>https://blog.youkuaiyun.com/xiaxiayige/article/details/102605103</link><guid>https://blog.youkuaiyun.com/xiaxiayige/article/details/102605103</guid><author>xiaxiayige</author><pubDate>Thu, 17 Oct 2019 13:46:35 +0800</pubDate><description><![CDATA[RxJava已经更新到RxJava3了，本文采用Rxjava2学习。

前言
RxJava 是一种被扩展的观察者模式，由被观察者（Observable）订阅 观察者（Observer）。

Github RxJava
1.什么是观察者模式
简述：观察者模式是由被观察者和观察者组成，通过被观察者发送通知，观察者接收到通知处理自己的事情。
1.1 传统观察者模式（一个被观察者，n个观察者）
打个比方...]]></description><category></category></item></channel></rss>