<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[loji521的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/loji521</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; loji521]]></copyright><item><title><![CDATA[快速排序--算法快速排序]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/148106327</link><guid>https://blog.youkuaiyun.com/loji521/article/details/148106327</guid><author>loji521</author><pubDate>Wed, 21 May 2025 10:38:29 +0800</pubDate><description><![CDATA[是选择一个“基准”元素（pivot），然后将数组分成两部分：一部分的所有元素都小于等于基准，另一部分的所有元素都大于基准。最差：O(n2)：这种情况发生在每次选择的基准都是当前数组的最大或最小值，导致每次分区后只减少一个元素。遍历完后pointer左边的都是小于等于pivot，右边的(包括pointer)都是大于pivot，此时应该将pivot和pointer交换，使得pivot移到正确位置。：重新排列数组，使得所有比基准小的元素放在基准前面，所有比基准大的元素放在基准后面（相等的元素可以在任一边）。]]></description><category></category></item><item><title><![CDATA[对 FLAG_ACTIVITY_NEW_TASK、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_SINGLE_TOP 的理解]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/136683206</link><guid>https://blog.youkuaiyun.com/loji521/article/details/136683206</guid><author>loji521</author><pubDate>Wed, 13 Mar 2024 16:05:29 +0800</pubDate><description><![CDATA[默认情况下（即没有 newtask flag），启动一个 Activity 时，被启动的 Activity 会在启动它的 Activity 的栈中创建（不管它们 taskAffinity 是否一样）。加上 newtask flag 后，启动一个 Activity 时，如果需要创建，被启动的 Activity 会在它需要的栈中创建。activity 在它需要的栈里存在，它上面的 activity 会出栈，它自己 onNewIntent 被调用。]]></description><category></category></item><item><title><![CDATA[Android开发笔记：2023年常用Android开发框架整理]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/136442800</link><guid>https://blog.youkuaiyun.com/loji521/article/details/136442800</guid><author>loji521</author><pubDate>Mon, 04 Mar 2024 08:47:22 +0800</pubDate><description><![CDATA[android 常用开发框架]]></description><category></category></item><item><title><![CDATA[java关键字volatile用法详解]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/136145406</link><guid>https://blog.youkuaiyun.com/loji521/article/details/136145406</guid><author>loji521</author><pubDate>Sun, 18 Feb 2024 09:24:49 +0800</pubDate><description><![CDATA[volatile]]></description><category></category></item><item><title><![CDATA[Android TV焦点控制逻辑]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/134026178</link><guid>https://blog.youkuaiyun.com/loji521/article/details/134026178</guid><author>loji521</author><pubDate>Wed, 25 Oct 2023 08:40:22 +0800</pubDate><description><![CDATA[android:nextFocusUp="@id/下一个控件的id"分别对应该控件按下↑、↓、←、→键对应的下一个控件。]]></description><category></category></item><item><title><![CDATA[Android 导航栏状态栏标题栏对应的颜色设置方法]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/132665323</link><guid>https://blog.youkuaiyun.com/loji521/article/details/132665323</guid><author>loji521</author><pubDate>Mon, 04 Sep 2023 11:13:53 +0800</pubDate><description><![CDATA[Android 导航栏状态栏标题栏对应的颜色设置方法]]></description><category></category></item><item><title><![CDATA[Android设备如何保证数据同步写入磁盘]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/131943297</link><guid>https://blog.youkuaiyun.com/loji521/article/details/131943297</guid><author>loji521</author><pubDate>Wed, 26 Jul 2023 17:00:58 +0800</pubDate><description><![CDATA[用OutputStream写入Sd上的文件，写完后会有打印提示，如果立即把机器断电，再打开被写入的文件，发现成了0字节。一直怀疑是写在缓存，没同步到磁盘，于是在write()后加了个flush()，结果还是0字节。用OutputStream的子类FileOutputStream打开文件，FileOutputStream中就有同步的方法：FileOutputStream.getFD().sync()，在write()后执行就不会出现文件清0的问题了。所以flush根本没用。]]></description><category></category></item><item><title><![CDATA[android 修改最近任务列表的图标以及名称]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/130763042</link><guid>https://blog.youkuaiyun.com/loji521/article/details/130763042</guid><author>loji521</author><pubDate>Fri, 19 May 2023 11:22:40 +0800</pubDate><description><![CDATA[ActivityManager.TaskDescription description = new ActivityManager.TaskDescription("名字", R.drawable.gp, 0);在activity里加入 如下代码。]]></description><category></category></item><item><title><![CDATA[Android环境变量配置]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/125040260</link><guid>https://blog.youkuaiyun.com/loji521/article/details/125040260</guid><author>loji521</author><pubDate>Mon, 30 May 2022 09:06:05 +0800</pubDate><description><![CDATA[Android环境变量配置]]></description><category></category></item><item><title><![CDATA[android10调用安装程序安装apk]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/124888143</link><guid>https://blog.youkuaiyun.com/loji521/article/details/124888143</guid><author>loji521</author><pubDate>Fri, 20 May 2022 18:37:46 +0800</pubDate><description><![CDATA[android10调用安装程序安装apk]]></description><category></category></item><item><title><![CDATA[Android代码如何重构]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/124133983</link><guid>https://blog.youkuaiyun.com/loji521/article/details/124133983</guid><author>loji521</author><pubDate>Tue, 12 Apr 2022 20:53:36 +0800</pubDate><description><![CDATA[讲一下Android代码重构的思路

1.新增提取函数
&lt;1&gt;复杂逻辑拆成函数
&lt;2&gt;大函数拆成小函数

2.父类和子类之间转移函数
&lt;1&gt; 把子类的x相同逻辑，提取成父类函数
&lt;2&gt; 把父类的非通用逻辑，提取成用到的个别子类中的函数

3.类之间转移函数
如果类之间重复调用耦合，可以考虑把耦合的逻辑全部提取到一个类，符合单一原则

4.复杂类拆分成几个类
按照单一原则
比如图片下载类拆解成三个：
1.catch缓存策略类
2.Download下载类
3.Im]]></description><category></category></item><item><title><![CDATA[架构思维——代码功能聚散之道]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/124128633</link><guid>https://blog.youkuaiyun.com/loji521/article/details/124128633</guid><author>loji521</author><pubDate>Tue, 12 Apr 2022 17:00:12 +0800</pubDate><description><![CDATA[架构思维——代码功能聚散之道]]></description><category></category></item><item><title><![CDATA[RecyclerView 设置item间距]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/123096971</link><guid>https://blog.youkuaiyun.com/loji521/article/details/123096971</guid><author>loji521</author><pubDate>Wed, 23 Feb 2022 19:02:11 +0800</pubDate><description><![CDATA[RecyclerView 设置item间距]]></description><category></category></item><item><title><![CDATA[Android studio 多渠道打包]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/122975447</link><guid>https://blog.youkuaiyun.com/loji521/article/details/122975447</guid><author>loji521</author><pubDate>Thu, 17 Feb 2022 08:36:16 +0800</pubDate><description><![CDATA[build.gradle中，old 是原始的资源标签，aa是新的资源标签

android {

...


        sourceSets {

            aa.res.srcDirs = ['src/main/res-aa']
            old.res.srcDirs = ['src/main/res']
        }

        flavorDimensions "main"
        productFlavors {
            // ]]></description><category></category></item><item><title><![CDATA[高并发和高性能]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/121966586</link><guid>https://blog.youkuaiyun.com/loji521/article/details/121966586</guid><author>loji521</author><pubDate>Thu, 16 Dec 2021 08:37:06 +0800</pubDate><description><![CDATA[互联网应用系统开发肯定经常会看到高并发和高性能这两个词，可谓是耳熟能详，而具体的含义和关系真的如你所想的，真正的理解了吗？



这次，我也结合自己的理解，来跟大家分享一下。



先来看一个例子：

一个蓄水池，是1m*1m*1m=1立方米大小，有一个出水口，出水口每秒钟流出0.1立方米，那么这个蓄水池的并发量是1立方米，出水速度是0.1立方米/秒。

如果增加一个出水口，都是每秒钟流出0.1立方米，那么这个蓄水池的并发量没变，但是出水速度变成了0.2立方米/秒。

同理，增大了出水口，蓄水池的出水速度也]]></description><category></category></item><item><title><![CDATA[Android 设计模式-面向对象六大原则]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/117923018</link><guid>https://blog.youkuaiyun.com/loji521/article/details/117923018</guid><author>loji521</author><pubDate>Tue, 15 Jun 2021 13:55:35 +0800</pubDate><description><![CDATA[前言


先说下一下为什么决定来写关于设计模式的文章，本人也是从事开发很多年了，很多人肯定都曾有过这样的想法，就是把设计模式背下来，到时候项目用到的时候就套用下，往往用到的时候早就忘了怎么写了，或许只是简单记住几个写法，现在看来这并不是真正的理解，套用不等于理解，真正理解之后会在思维里面形成一种模型，在做架构设计、封装代码时候会自然的把场景带入，去理解每一种模式的场景、优点、缺点，才能更好的运用。
	设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代...]]></description><category></category></item><item><title><![CDATA[JAVA – 虚函数、抽象函数、抽象类、接口]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/113247070</link><guid>https://blog.youkuaiyun.com/loji521/article/details/113247070</guid><author>loji521</author><pubDate>Wed, 27 Jan 2021 13:54:26 +0800</pubDate><description><![CDATA[JAVA –虚函数、抽象函数、抽象类、接口


1. Java虚函数


虚函数的存在是为了多态。

C++中普通成员函数加上virtual关键字就成为虚函数

Java中其实没有虚函数的概念，它的普通函数就相当于C++的虚函数，动态绑定是Java的默认行为。如果Java中不希望某个函数具有虚函数特性，可以加上final关键字变成非虚函数

PS:其实C++和Java在虚函数的观点大同小异，异曲同工罢了。




2. Java抽象函数(纯虚函数)


抽象函数或者说是纯虚函数的存在是为了定义接...]]></description><category></category></item><item><title><![CDATA[对Java回调的理解]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/113242348</link><guid>https://blog.youkuaiyun.com/loji521/article/details/113242348</guid><author>loji521</author><pubDate>Wed, 27 Jan 2021 10:22:53 +0800</pubDate><description><![CDATA[A调用B中的方法b，需要传入A自身引用（传入A本身和传入A的接口，区别就是A本身可以用全部的函数，传接口只能用接口中的函数），方法b执行完毕后，再利用传入的A的引用，调用A中的方法




...]]></description><category></category></item><item><title><![CDATA[java 单例模式的几种实现方式]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/112983034</link><guid>https://blog.youkuaiyun.com/loji521/article/details/112983034</guid><author>loji521</author><pubDate>Fri, 22 Jan 2021 13:58:13 +0800</pubDate><description><![CDATA[java 单例模式的几种实现方式



1.懒汉式


public class Singleton {
 //2.本类内部创建对象实例
 private static Singleton instance = null;

 /**
   * 1.构造方法私有化，外部不能new
   */
 private Singleton() {

 }

//3.提供一个公有的静态方法，返回实例对象

 public static Singlet...]]></description><category></category></item><item><title><![CDATA[Android.mk文件语法规范及使用模板]]></title><link>https://blog.youkuaiyun.com/loji521/article/details/109720747</link><guid>https://blog.youkuaiyun.com/loji521/article/details/109720747</guid><author>loji521</author><pubDate>Mon, 16 Nov 2020 14:35:41 +0800</pubDate><description><![CDATA[Android.mk文件语法规范

Introduction:

Android.mk编译文件是用来向Android NDK描述你的C,C++源代码文件的，这篇文档描述了它的语法。在阅读下面的内容之前，假定你已经阅读了docs/OVERVIEW.TXT文件，了解了它们的脚色和用途。



概述:

一个Android.mk file用来向编译系统描述你的源代码。具体来说：-该文件是GNU Makefile的一小部分，会被编译系统解析一次或更多次的build系统。因此，您应尽量减少您声明的变量，不要认为某..]]></description><category></category></item></channel></rss>