<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Androidtalent的博客]]></title><description><![CDATA[努力成为一名talent，fighting]]></description><link>https://blog.youkuaiyun.com/Androidtalent</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Androidtalent]]></copyright><item><title><![CDATA[Android 协程使用到原理详解]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/123915787</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/123915787</guid><author>Androidtalent</author><pubDate>Sat, 02 Apr 2022 11:06:29 +0800</pubDate><description><![CDATA[协程是什么
协程是我们在 Android上进行异步编程的推荐解决方案之一，通过挂起和恢复让状态机状态流转实现把层层嵌套的回调代码变成像同步代码那样直观、简洁，协程的出现很好的避免了回调地狱的出现。
所谓挂起，是指挂起协程，而非挂起线程，并且这个操作对线程是非阻塞式的。当线程执行到协程的 suspend 函数的时候，对于线程而言，线程会被回收或者再利用执行其他工作，就像主线程其实是会继续 UI 刷新工作。而对于协程本身，会根据 withContext 传入的 Dispatchers 所指定的线程去执行任务。
]]></description><category></category></item><item><title><![CDATA[探索 Jetpack Compose]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/123590583</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/123590583</guid><author>Androidtalent</author><pubDate>Sat, 19 Mar 2022 10:50:09 +0800</pubDate><description><![CDATA[前言
在大前端概念快速发展下，出现了很多声明式 UI 写法的语言或框架，像前端的 react、iOS 的 Swift UI，还有 Google 的 Flutter，但很少会听到 Android 原生有什么革命性的声明式 UI 的技术或支持跨平台，这不，Google 推出了 Compose。下面，文中会对 Compose 做一些简要的剖析，以及带大家简单认识一下 KMM 的神秘面纱。
Compose 是什么？
发展路线

2019 年 Google I/O 大会上公布的新的 UI 库 Compose，Jetp]]></description><category></category></item><item><title><![CDATA[LeakCanary 源码深挖]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/105342546</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/105342546</guid><author>Androidtalent</author><pubDate>Mon, 06 Apr 2020 13:28:21 +0800</pubDate><description><![CDATA[一、前言
LeakCanary 是 Android 端用于自动检测内存泄漏的开源库，使用这个工具可以方便的监控 Activity 和 Fragment 的内存泄漏情况, 并且提供了可视化界面, 可以在开发过程中很好的暴露和排查问题。基于 LeakCanary 1.5.4 源码。
二、怎样使用？
添加依赖
dependencies {
    ......
    implementation 'c...]]></description><category></category></item><item><title><![CDATA[代理设计模式在Android开发中的应用]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/104034882</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/104034882</guid><author>Androidtalent</author><pubDate>Sat, 18 Jan 2020 23:14:08 +0800</pubDate><description><![CDATA[1. 模式定义
为其他对象提供一种代理以控制对这个对象的访问,分为静态代理和动态代理,代理模式也被称为委托模式，它是结构型设计模式的一种。在现实生活中我们用到类似代理模式的场景有很多，比如代理上网、打官司等。编程的思想其实有的时候和生活差不多。
2. 代理模式的差异
静态代理，在代码运行前就已经存在了代理类的class编译文件；而动态代理则是在代码运行时通过反射来动态地生成代理类的对象，并确定到底...]]></description><category></category></item><item><title><![CDATA[观察者设计模式在Android开发中的应用]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/104007044</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/104007044</guid><author>Androidtalent</author><pubDate>Thu, 16 Jan 2020 16:27:37 +0800</pubDate><description><![CDATA[1. 模式定义
定义对象间一种一对多的依赖关系，每当一个对象改变状态时，则所有依赖于它的对象都会
得到通知并被自动更新。
2. Android 源码中的观察者模式应用
在 Android 的源码中，我们接触比较多的应该是 RecyclerView 和 ListView 了，和其搭配使用的 Adapter，有 刷新列表的 notifyDataSetChanged() 方法，那么，该方法是怎样刷新列表...]]></description><category></category></item><item><title><![CDATA[策略设计模式在Android开发中的应用]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/103990222</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/103990222</guid><author>Androidtalent</author><pubDate>Wed, 15 Jan 2020 15:28:28 +0800</pubDate><description><![CDATA[1. 模式定义
定义一系列的算法，把每一个算法封装起来，并且使它们可相互替换。策略设计模式使得算法可
独立于使用它的客户而独立变化。
2. 策略示例
假如我们要做一款理财产品，有支付宝和微信两个支付渠道，两个渠道的金额算法不一样，这时再来了一个工行支付渠道又或者后面再来多几个渠道，而当每个渠道的金额算法不一样的时候，这时使用策略设计模式将各个渠道的金额算法封装起来，即可条理清晰，万一某个渠道的算法...]]></description><category></category></item><item><title><![CDATA[装饰设计模式在Android开发中的应用]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/103979354</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/103979354</guid><author>Androidtalent</author><pubDate>Tue, 14 Jan 2020 20:26:44 +0800</pubDate><description><![CDATA[1. 模式定义
装饰设计模式也称包装设计模式，用来动态的扩展对象的功能，也是继承关系的的一种替代方案之一。在不使用的继承的方式下，采用装饰设计模式可以扩展一个对象的功能，可以使一个对象变得越来越强大。
2. Android 源码的学习和思考
相信用过 ListView 的朋友都知道，ListView 有自带的方法可以添加 header 和 footer，那么 ListView 是怎样做到的呢？
L...]]></description><category></category></item><item><title><![CDATA[工厂设计模式在Android开发中的应用]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/103941893</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/103941893</guid><author>Androidtalent</author><pubDate>Sat, 11 Jan 2020 23:28:39 +0800</pubDate><description><![CDATA[1. 模式定义
定义一个创建对象的接口，让子类决定实例化哪个类，而对象的创建统一交由工厂去生成，有良好的封装性，既做到了解耦也保证了最少知识原则。工厂就是用来生成对象的，把对象的实例化和初始化封装起来。
下面以数据存储为例介绍工厂设计模式的用法。
2. 简单工厂模式
定义数据操作接口（产品接口）
public interface IOHandler {
    /*************save...]]></description><category></category></item><item><title><![CDATA[Android 音视频开发之自己动手编译 FFmpeg]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/103390150</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/103390150</guid><author>Androidtalent</author><pubDate>Wed, 04 Dec 2019 17:04:06 +0800</pubDate><description><![CDATA[前言
ffmpeg 一套可以用来记录、转换数字音频、视频，并能将其转化为流的开源计算机程序，对于音视频领域，有着极为重要的地位。作为一名 Android developer，如要涉足音视频领域，编译使用 ffmpeg 是不可少的进阶旅程。下面带你一步步实现 ffmpeg 的编译，在此之前，需要准备具有 Linux 环境的系统，如 Ubuntu、Mac，可以弄一个云服务器，也可以装个虚拟机，读者自行...]]></description><category></category></item><item><title><![CDATA[NDK 开发之使用 OpenCV 实现银行卡号识别]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/102642350</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/102642350</guid><author>Androidtalent</author><pubDate>Sat, 19 Oct 2019 19:59:54 +0800</pubDate><description><![CDATA[前言
在日常的开发中，我们有时会遇到添加银行卡的需求，这时候，产品可能会让你仿一下支付宝之类的相机扫描识别银行卡号。很多时候，做这样的需求会去找找稳定的第三方，本文通过 OpenCV 结合识别的需求带你分析如何实现银行卡号的识别。由于作者技术有限，本文仅从如何做到识别的思路上介绍，文中例子不适用于实际开发，也不是所有银行卡都能识别，但希望读者可以在实现的思路上给予一些启发，以及更深入熟悉 Open...]]></description><category></category></item><item><title><![CDATA[NDK 开发之 OpenCV 使用实践]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/102309740</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/102309740</guid><author>Androidtalent</author><pubDate>Mon, 07 Oct 2019 15:33:09 +0800</pubDate><description><![CDATA[前言
OpenCV 提供的视觉处理算法非常丰富，对图像、视频处理提供比较方便的处理方法，本文介绍使用 OpenCV 对图像进行处理，本文例子基于 Android Studio 3.4.1，OpenCV 3.4.6，gradle-5.1.1，build:gradle:3.4.1。若下载 Demo 编译不成功请升级 AS 或 将相关配置修改，项目源码在文末链接下载。
1. 转灰度图
主要使用 cvtC...]]></description><category></category></item><item><title><![CDATA[NDK 开发之使用 OpenCV 实现人脸识别]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/101323142</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/101323142</guid><author>Androidtalent</author><pubDate>Wed, 25 Sep 2019 00:41:12 +0800</pubDate><description><![CDATA[1. 前言
本文讲述如何使用 OpenCV 进行简单的人脸识别开发，在此之前，需要配置好 OpenCV 和 NDK 环境。OpenCV 我使用的版本是：OpenCV 3.4.6，可在 这里 下载。NDK 使用的版本是 android-ndk-r16b，可在 这里 下载，对于因为使用其他版本导致的问题，本文不做叙述，因为使用其他版本，会遇到非常多的坑，敬请留意。
2. NDK 配置
在 SDK Ma...]]></description><category></category></item><item><title><![CDATA[NDK学习之路之 c++ 知识归纳]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/100060741</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/100060741</guid><author>Androidtalent</author><pubDate>Sun, 25 Aug 2019 10:33:52 +0800</pubDate><description><![CDATA[1.c++ 引用
其实就是四驱模型的拷贝，引用其实是地址赋值，可以看成同一块内存的另外一个变量
以两个变量值交换为例
#include&lt;stdio.h&gt;
void swap(int &amp;number1, int &amp;number2) {
	// &amp;number 此处相当于同一块内存 取了另一个别名
	int temp = number1;
	number1 = nu...]]></description><category></category></item><item><title><![CDATA[Jni 学习之路--Jni 小知识库]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/99767865</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/99767865</guid><author>Androidtalent</author><pubDate>Mon, 19 Aug 2019 21:59:41 +0800</pubDate><description><![CDATA[一、Java 和 native 层对照知识点
1.返回值和参数类型对照表




Java类型
本地类型
描述




boolean
jboolean
C/C++8位整型


byte
jbyte
C/C++带符号的8位整型


char
jchar
C/C++无符号的16位整型


short
jshort
C/C++带符号的16位整型


int
jint
C/C++带符号的32位整型


...]]></description><category></category></item><item><title><![CDATA[Jni 学习之路--入门尝鲜详细教程]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/99566125</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/99566125</guid><author>Androidtalent</author><pubDate>Wed, 14 Aug 2019 14:21:46 +0800</pubDate><description><![CDATA[一、入门准备
鉴于方便入门尝鲜，先准备好 visual studio（我是用2013版），eclipse。visual studio 用于编写 c 代码，生成动态 dll 文件，eclipse 用于编写调用 native 的代码。
二、编写代码
第 1 步，在 eclipse 新建一个 Java 项目，新建一个类为 Simple1.java
代码如下：
public class Simple1 {...]]></description><category></category></item><item><title><![CDATA[可挖孔、可圆角、可带分割线的卡片 ViewGroup]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/85721323</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/85721323</guid><author>Androidtalent</author><pubDate>Thu, 03 Jan 2019 21:17:24 +0800</pubDate><description><![CDATA[  
使用
implementation 'com.vegen.open:HoleCardView:+'

其中 '+' 请填写版本号 Download 后的最新版本
使用示例
布局
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;android.support.constraint.ConstraintLayout xmlns:android=&quot;...]]></description><category></category></item><item><title><![CDATA[含覆盖模式、色块拼接组合模式的可渐变、可中间带文字列表的圆环进度条]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/85697663</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/85697663</guid><author>Androidtalent</author><pubDate>Thu, 03 Jan 2019 15:14:12 +0800</pubDate><description><![CDATA[  
使用
implementation 'com.vegen.open:ProgressBar:+'

其中 '+' 请填写版本号 Download 后的最新版本
使用示例
布局
&amp;amp;lt;LinearLayout xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;
    xmlns:app=&amp;quot;http://schemas.and...]]></description><category></category></item><item><title><![CDATA[RecyclerView方案打造的可见页为两页或三页的轮播控件]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/83927281</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/83927281</guid><author>Androidtalent</author><pubDate>Sat, 10 Nov 2018 10:45:21 +0800</pubDate><description><![CDATA[使用
implementation 'com.vegen.open:VRecyclerViewBanner:1.0.0'

其中 ‘+’ 请填写版本号我的Github项目地址
Download 后的最新版本
示例(kotlin)
&amp;amp;amp;lt;com.vegen.open.library.VRecyclerViewBanner
        android:id=&amp;amp;quot;@+id/banner_type1&amp;amp;quot;...]]></description><category></category></item><item><title><![CDATA[EventBus 源码分析]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/82535106</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/82535106</guid><author>Androidtalent</author><pubDate>Sun, 09 Sep 2018 01:20:39 +0800</pubDate><description><![CDATA[
  本篇文章是EventBus的源码分析，以了解其实现的精髓`。EventBus是针对Android优化的发布-订阅事件总线，简化了Android组件间的通信。Github地址：EventBus




一、注册 register 源码分析

我们在使用 EventBus 的时候，一般通过EventBus.getDefault().register(this); 进行注册，注册的内部实现是


...]]></description><category></category></item><item><title><![CDATA[动画实战：打造仿搜索引擎加载动画]]></title><link>https://blog.youkuaiyun.com/Androidtalent/article/details/80643957</link><guid>https://blog.youkuaiyun.com/Androidtalent/article/details/80643957</guid><author>Androidtalent</author><pubDate>Sun, 10 Jun 2018 19:39:45 +0800</pubDate><description><![CDATA[前言


  在上一篇 动画实战：打造炫酷的加载动画 中，我们利用属性动画打造了较为炫酷的加载动画，本篇文章还是以属性动画为利器，结合自定义 View/ViewGroup 打造仿某搜索引擎搜索中的动画效果。






1.效果分析



1.1 效果图



1.2 效果分析


  三个点，每次回到中间会交换颜色，属性动画控制运动






2.实现分析


  RelativeLayout...]]></description><category></category></item></channel></rss>