<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Young_Time的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Young_Time</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Young_Time]]></copyright><item><title><![CDATA[Android 线程通信 —— Handler 使用]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/108472975</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/108472975</guid><author>Young_Time</author><pubDate>Tue, 08 Sep 2020 17:16:57 +0800</pubDate><description><![CDATA[Android 线程通信 —— Handler 使用
Android 应用是一个多线程应用，Android 有一个主线程，在没有特定指明线程的前提下，你执行的代码都是在 Android 主线程中运行。一般来说 Android 的 View 绘制是在主线程中完成的，所以如果我们在主线程中进行耗时操作时，线程无响应就会导致 UI 绘制等其它用户所看到的东西和执行的操作卡住，给用户带来不好的体验。所以 Android 中规定了 ANR（Application Not Responding：应用无响应）。
ANR ]]></description><category></category></item><item><title><![CDATA[AndroidX 迁移步骤，一篇就够了]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/107567088</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/107567088</guid><author>Young_Time</author><pubDate>Fri, 24 Jul 2020 18:18:24 +0800</pubDate><description><![CDATA[AndroidX 迁移
2018 年 I/O 大会后，Google 宣布将 Support Lib 重构为 AndroidX 的计划，随后便在 Support Lib 28 上进行了重构。然而因为后续不会在 Support Lib 上修复 bug 或者发布新功能，而且 Support Lib 和 AndroidX Lib 在项目中会互相冲突，所以我们不可避免的要进行 AndroidX 迁移。此篇文章就是笔者进行 AndroidX 迁移时的步骤和踩过的坑，希望可以帮到你。
新建分支或者备份项目
因为 Andr]]></description><category></category></item><item><title><![CDATA[常问的几个基础排序，要不再复习一下？]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/106507257</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/106507257</guid><author>Young_Time</author><pubDate>Tue, 02 Jun 2020 22:59:42 +0800</pubDate><description><![CDATA[Github 地址
排序，不管是日常开发还是面试中，都会被光顾，虽然现在 jdk 的集合中提供了排序的方法，但是我们也得去熟悉一些基础的排序算法，这里笔者给大家分享五个常问的基础排序，冒泡、选择、插入、希尔、快排。
冒泡排序
冒泡排序，顾名思义就是排序元素时像冒泡一样，把最大或者最小慢慢比较到数组尾部，实现排序的方法。具体就是，如果有一个长度为 n 的数组 num，将 num[0] 与 num[1] 比较，如果 num[0] &gt; num[1] ，则交换位置，反之则不交换。再比较 num[1] 和 nu]]></description><category></category></item><item><title><![CDATA[关于二叉树的遍历，你要的都在这]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/106391630</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/106391630</guid><author>Young_Time</author><pubDate>Wed, 27 May 2020 21:58:55 +0800</pubDate><description><![CDATA[关于二叉树的遍历，你要的都在这
树的概括
树
什么是树，树是数据结构中的一个基础类型，是包含n（n&gt;=0）个结点的有穷集，由这 n 个节点组成一个具有层次关系的集合，因为其可视化形状像一颗倒立的树，所以被称为树。树的节点可以分为父节点和子节点，一个父节点可以对应 m (m&gt;=0) 个子节点，子节点只有一个父节点，最顶部的节点被称为根节点或者树根。一个结点含有的子结点的个数称为该结点的度，度为 0 的称为叶子节点或终端节点。除了根结点外，每个子结点可以分为多个不相交的子树，所以也可以说树是由根结点]]></description><category></category></item><item><title><![CDATA[使用 Fresco 展示 Gif，控制播放次数，拿着就能用]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/106241587</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/106241587</guid><author>Young_Time</author><pubDate>Wed, 20 May 2020 18:21:06 +0800</pubDate><description><![CDATA[我们在开发中经常会做一些 Gif 展示，而一些开源的图片框架如 Glide、Fresco、GifImageView 也能够展示 Gif，GifImageView 可以直接设置播放次数，而 Fresco 好像并没有设置播放次数的，就需要我们自己来处理。

 首先，要使用 Fresco 就得先依赖，注意两个版本得一致：


implementation 'com.facebook.fresco:fresco:1.5.0'
implementation 'com.facebook.fresco:animat...]]></description><category></category></item><item><title><![CDATA[如何防止系统弹窗被多次调用]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/104774609</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/104774609</guid><author>Young_Time</author><pubDate>Tue, 10 Mar 2020 15:10:04 +0800</pubDate><description><![CDATA[在日常的开发中，我们经常会使用到 Dialog、PopupWindow、Toast 等，为了防止重复点击多次弹出，我们可以使用单例、或者定时器，配合 isShow() 的方法能很好的解决这个问题。

那么系统的弹窗呢？比如 Intent 分享，我们没有弹窗打开关闭的回调，也不能做弹窗的单例，那我们要怎么解决这个问题呢？笔者介绍两种方式。

1. 使用定时器，设置开关


private bo...]]></description><category></category></item><item><title><![CDATA[支持左滑菜单栏的 RecyclerView]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/103577886</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/103577886</guid><author>Young_Time</author><pubDate>Tue, 17 Dec 2019 11:51:52 +0800</pubDate><description><![CDATA[iOS 有一个自己的交互方式，左滑菜单栏的数据列表，手机 QQ 也是这样的交互方式，但是 Android 自身却没有这样的控件，需要我们自己去封装，笔者这里封装了一个简易版的，需要自取。
先放效果图

优点
轻量：该库比较轻量，不会因为引库导致应用庞杂
简单：使用简单，Activity 内只需要几行代码实现
依赖


克隆本项目，然后在你的 IDE 中依赖本项目的 slide_recyclervi...]]></description><category></category></item><item><title><![CDATA[Android 获取 Notification 权限]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/103454320</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/103454320</guid><author>Young_Time</author><pubDate>Mon, 09 Dec 2019 10:59:15 +0800</pubDate><description><![CDATA[本来需要拿一下 Notification 的权限，看了一下网上的博客，基本上都是使用反射，代码较长，而且试了一下，好像拿到的结果也不是很准确，其实可以直接使用 Google 提供的方法：


NotificationManagerCompat.from(this).areNotificationsEnabled();

一行代码拿到权限，但是需要注意的是，看了源码后发现 4.4 以下是拿不到权...]]></description><category></category></item><item><title><![CDATA[HashSet 源码解析]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/102806148</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/102806148</guid><author>Young_Time</author><pubDate>Tue, 29 Oct 2019 18:32:43 +0800</pubDate><description><![CDATA[HashSet 源码解读
原地址：GiHub
HashSet 也是 Java 集合中一个相对常用的，其内部实现比较简单，而且其内部是相当于维护了一个 HashMap，可以先看一下 HashMap 源码解读。与 HashMap 维护的 key-value 两个成员不同的是，HashSet 只相当于维护了一个成员 E，虽然内部使用的 HashMap，但是内部维护的 HashMap 的 value 是一...]]></description><category></category></item><item><title><![CDATA[ArrayList 源码分析（基于 JDK 1.8）]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/101647704</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/101647704</guid><author>Young_Time</author><pubDate>Sat, 28 Sep 2019 23:40:20 +0800</pubDate><description><![CDATA[ArrayList 源码分析
ArrayList 是 Java 中比较常用的集合之一。它实现了 List, RandomAccess, Cloneable, java.io.Serializable 这四个接口，List 接口是为了让 ArrayList 去实现 List 的各种方法，实现 RandomAccess 是为了让 ArrayList 支持快速快速随机访问，实现 Cloneable 是为...]]></description><category></category></item><item><title><![CDATA[Android 保存图片（包括网络图片）到单独的相册]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/101053395</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/101053395</guid><author>Young_Time</author><pubDate>Fri, 20 Sep 2019 17:31:34 +0800</pubDate><description><![CDATA[我们经常会遇到将图片保存到本地的操作，而且有时候我们需要将图片保存到一个单独的相册，比如微信保存的图片是放到微信相册，微博放到了微博相册。

 我们保存的图片可能有很多的类型，比如 Bitmap、网络图片、字节数组、资源 ID 等，根据不同的类型我们需要做不同的处理。

我们先看看怎么把 Bitmap 保存到本地相册：


public static void saveImageToGall...]]></description><category></category></item><item><title><![CDATA[Git Couldn't stash  Unable to create index.lock File exists.]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/100917294</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/100917294</guid><author>Young_Time</author><pubDate>Tue, 17 Sep 2019 10:19:34 +0800</pubDate><description><![CDATA[今天在使用 Git ，当我 pull 时，失败了，日志为：

Couldn't save uncommitted changes.
  Tried to save uncommitted changes in stash before Update, but failed with an error.
  Couldn't stash file://**: Unable t...]]></description><category></category></item><item><title><![CDATA[HashMap 源码中高闪代码]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/100549402</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/100549402</guid><author>Young_Time</author><pubDate>Wed, 04 Sep 2019 23:28:25 +0800</pubDate><description><![CDATA[HashMap 源码中高闪代码
原地址：Github
HashMap 源码中有很多的东西是值得我们去认真琢磨的，这里笔者就分享其中的一些超级棒的地方，当然还有更多的地方值得大家去努力探寻。
2 的整数次幂与 (n-1) &amp; hash
在笔者的 HashMap 源码解析 中说到了，HashMap 中规定了，数组 table 的容量以及扩容值都必须为 2 的整数次幂。在 HashMap 中，元...]]></description><category></category></item><item><title><![CDATA[HashMap 源码分享（构造方法、put、get、扩容）]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/100189741</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/100189741</guid><author>Young_Time</author><pubDate>Sun, 01 Sep 2019 23:37:15 +0800</pubDate><description><![CDATA[HashMap 源码解读
说到 HashMap，大家一定都不会陌生，不管是我们平时使用，或者是面试的时候，都会遇到它，了解其源码还是相当重要的。
HashMap 其实维护的的数据结构是 Node&lt;K,V&gt;  的数组加链表（下面会说到为什么），也是说的维护的 Hash 桶，什么意思呢？按照笔者个人理解就是说 HashMap 中保存数据的是一个叫 table 的数组，HashMap 有新数...]]></description><category></category></item><item><title><![CDATA[获取 Facebook keyHash]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/98060250</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/98060250</guid><author>Young_Time</author><pubDate>Thu, 01 Aug 2019 15:01:46 +0800</pubDate><description><![CDATA[try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "你的包名", 
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
   ...]]></description><category></category></item><item><title><![CDATA[Android 集成 Facebook 分享常见问题]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/96157567</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/96157567</guid><author>Young_Time</author><pubDate>Tue, 16 Jul 2019 17:46:58 +0800</pubDate><description><![CDATA[Facebook 作为世界上用户量最大的应用之一，很多时候我们可能会将自己应用的数据分享到 facebook上，那么我们就需要集成其 SDK，我们可以直接去集成 Facebook 官方的 SDK，也可以使用很多第三方 SDK ，包括友盟、Mob 等等，他们都是讲 Facebook、微信等官方的 SDK 再进行了一些封装。

 笔者在此就不对如何使用这些 SDK 做介绍了，网上有着很多的教程...]]></description><category></category></item><item><title><![CDATA[AS 不同分支的 Module 数量不同，导致切换分支后 module 不显示的问题]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/88993540</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/88993540</guid><author>Young_Time</author><pubDate>Wed, 03 Apr 2019 13:52:05 +0800</pubDate><description><![CDATA[在 AS 中 使用 git 工具进行不同分支的开发，比如不同分支要使用的 module 数量不同而导致切换分支后 module 不显示，而且 clean 和 rebuild 也不能解决问题，我们可以重启 AS。


...]]></description><category></category></item><item><title><![CDATA[Android Studio 上新建了 AIDL 文件，使用不了（找不到）怎么办]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/83017964</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/83017964</guid><author>Young_Time</author><pubDate>Thu, 11 Oct 2018 20:04:40 +0800</pubDate><description><![CDATA[    进程间通信，我们可以使用 AIDL，但是当我们在 Android Studio 上面新建了 AIDL 文件，却发现 new MyAidl.Stub() 找不到，这个使用要怎么办呢？

    编译一下，马上解决！！！...]]></description><category></category></item><item><title><![CDATA[TortoiseGit 的 Git Commit 和 Push 时，build 编译文件自动出现，也提交上去了]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/82851341</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/82851341</guid><author>Young_Time</author><pubDate>Wed, 26 Sep 2018 11:57:36 +0800</pubDate><description><![CDATA[  当我们使用 git 工具来进行合作开发时，把代码提交到远程库时是不希望将 build 文件也提交上去的，那么怎么解决这个办法呢？

  打开你 git 项目的根目录，就是有 .git 那个文件夹，修改 .gitignore 文件：



我们不想要 tortoiseGit 来获取哪些文件的改变就只要在里面加入想忽视的路径：



如我们加入了：
/SchoolProject/build

那么...]]></description><category></category></item><item><title><![CDATA[Program type already present: com.alibaba.android.arouter.routes.ARouter$$Group$$ImBusiness]]></title><link>https://blog.youkuaiyun.com/Young_Time/article/details/82713608</link><guid>https://blog.youkuaiyun.com/Young_Time/article/details/82713608</guid><author>Young_Time</author><pubDate>Sat, 15 Sep 2018 14:27:01 +0800</pubDate><description><![CDATA[  今天在写东西的时候报了一个错误，这个是使用 alibaba 的路由框架 ARouter，进行模块间通信报才错。

  Program type already present: com.alibaba.android.arouter.routes.ARouter$$Group$$ImBusiness

  意思是 Arouter 配置的路径的组路径已经存在了，举一个栗子：

  我们在中配置模...]]></description><category></category></item></channel></rss>