<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[i_nclude的博客]]></title><description><![CDATA[我不是在改bug，就是在改bug的路上]]></description><link>https://blog.youkuaiyun.com/i_nclude</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; i_nclude]]></copyright><item><title><![CDATA[Android 内存优化——常见内存泄露及优化方案]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/121355939</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/121355939</guid><author>i_nclude</author><pubDate>Tue, 16 Nov 2021 15:15:27 +0800</pubDate><description><![CDATA[前言
如果一个无用对象（不需要再使用的对象）仍然被其他对象持有引用，造成该对象无法被系统回 收，以致该对象在堆中所占用的内存单元无法被释放而造成内存空间浪费，这中情况就是内存泄 露。在 Android 开发中，一些不好的编程习惯会导致我们的开发的 app 存在内存泄露的情况。下面介 绍一些在 Android 开发中常见的内存泄露场景及优化方案。
单例导致内存泄露
单例模式在 Android 开发中会经常用到，但是如果使用不当就会导致内存泄露。因为单例的静态 特性使得它的生命周期同应用的生命周期一样长，如果一]]></description><category></category></item><item><title><![CDATA[Android 面包屑+Fragment]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/118660045</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/118660045</guid><author>i_nclude</author><pubDate>Sun, 11 Jul 2021 21:17:17 +0800</pubDate><description><![CDATA[实现效果：

使用方法：
加入依赖：
implementation 'com.github.1QQ6:CrumbsView:v1.0.4'

//面包屑
&lt;com.example.crumbsview.StrongCrumbsView
        android:id="@+id/breadCrumbs"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:]]></description><category></category></item><item><title><![CDATA[Handler的原理分析]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/114792101</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/114792101</guid><author>i_nclude</author><pubDate>Sun, 14 Mar 2021 17:34:51 +0800</pubDate><description><![CDATA[Handler的原理分析：

首先了解一下handler的主要成员

1.主要的有Message、MessageQueue、Looper、Handler

一个线程绑定一个looper，一个looper维护着一个MessageQueue队列，而一个线程可以对应多个handler


Handler：发送和接收消息
	Looper：取消息并分发消息给handler
	Message：将发送的消息封装成Message对象
	MessageQueue：将发送的Message对象存储在MessageQueue队列中]]></description><category></category></item><item><title><![CDATA[Retrofit+Okhttp实现注册登录+后端代码超详细步骤]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/113185107</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/113185107</guid><author>i_nclude</author><pubDate>Wed, 27 Jan 2021 22:22:24 +0800</pubDate><description><![CDATA[前言

这几天想学习网络相关的东西，那么就从最简单的开始吧，但是在网上搜了一下，百度还是谷歌都没有完整的教程，要不只有移动端代码，要不只有后端代码，所以我在完成之后想把这些记录下来，做一个简简单单的总结。从搭建环境开始一步一步来。代码比较粗糙，不过基本功能没问题。本文章用到框架不会的可以提前学起来了。

环境
移动端：
 1. AndroidStudio 4.1.1 
 2. 编程语言：kotlin
 3. 架构：mvp
 4. 框架库：retrofit2+okhttp3(这里没用rxjava是因为有kot]]></description><category></category></item><item><title><![CDATA[【算法】冒泡排序+选择排序+插入排序]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/112682852</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/112682852</guid><author>i_nclude</author><pubDate>Fri, 15 Jan 2021 18:36:47 +0800</pubDate><description><![CDATA[目录



前言



1.冒泡排序

1.1冒泡排序思路

1.2冒泡排序图解

1.3冒泡排序代码实现

1.4冒泡排序的时间复杂度分析：

1.5冒泡排序的空间复杂度

2.选择排序

2.1选择排序思路：

2.2选择排序图解

2.3选择排序代码实现

2.4选择排序的时间复杂度分析：

2.5选择排序的空间复杂度分析：

3.插入排序:

3.1插入排序原理：

3.2插入排序图解

3.3插入排序代码实现

3.4插入排序的时间复杂度分析：

前言

本篇文章讲解了冒泡排序，选择排序和插入..]]></description><category></category></item><item><title><![CDATA[【算法】时间复杂度和空间复杂度分析]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/112622265</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/112622265</guid><author>i_nclude</author><pubDate>Thu, 14 Jan 2021 17:32:12 +0800</pubDate><description><![CDATA[前言
现在面试越来越难，基本上是造火箭，而算法又是必不可少的面试题，对程序员来说，算法的要求也越来越高，如果没有好的算法基础，想进一家不错的公司基本上是无缘了，所以在此再回顾一下吧，把扔给老师的再补回来（T T）
算法的时间复杂度分析
定义：
在进行算法分析时，语句总的执行次数T(n)是关于问题规模n的函数，进而分析T(n)随着n的变化情况并确定T(n)的量级。
算法的时间复杂度，就是算法的时间量度，记作:T(n)=O(f(n))。它表示随着问题规模n的增大，算法执行时间的增长率和f(n)的增长率相同，称作]]></description><category></category></item><item><title><![CDATA[【算法】已知一个搜索二叉树后序遍历的数组posArr,根据posArr重建树]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/112210726</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/112210726</guid><author>i_nclude</author><pubDate>Tue, 05 Jan 2021 00:15:48 +0800</pubDate><description><![CDATA[已知一个搜索二叉树后序遍历的数组posArr,根据posArr重建树
/**
 * 已知一个搜索二叉树后序遍历的数组，建对应树并返回头结点
 *
 *      8
 *     / \
 *    4   10
 *   / \  / \
 *  2  6 9  12
 *
 *  后续遍历结果：[2,6,4,9,12,10,8]
 *
 *
 *  思路：
 *  1.后序遍历的最后一个数绝对是根节点
 *  2.找左子数：从[left，right-1]范围开始找比最后一个数字小的数的最右面的那个数，记]]></description><category></category></item><item><title><![CDATA[理解android中最熟悉的Context]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/106245428</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/106245428</guid><author>i_nclude</author><pubDate>Wed, 20 May 2020 22:27:46 +0800</pubDate><description><![CDATA[Context的介绍

Context 在Android开发中几乎无处不在，对于开发来说实在是再熟悉不过了。但是你真的了解它吗？是否在使用的时候分不清楚呢？并且可能你的一不小心就会导致内存泄漏。
由于Android中存在不同类型的Context，因此作为Android开发，我们可能刚开始不知道在某个位置使用哪个上下文。所以，我们看看下面是如何正确使用Context的。
其中android主要有两种类型的上下文：
Application Context：这是一个单例，可以在activity中使用getAppl]]></description><category></category></item><item><title><![CDATA[java和kotlin如何相互转化]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/106023352</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/106023352</guid><author>i_nclude</author><pubDate>Sat, 09 May 2020 17:16:55 +0800</pubDate><description><![CDATA[java转kotlin
Shift + Alt + Cmd + k Mac
Shift + Alt + Ctrl + k  Windows
如下图所示：

这里记录下java一键转kotlin遇到的几个错误：
1.Overload resolution ambiguity. All these functions match
原因：名字冲突。编译器不知道引用哪一个
参考链接1
2.Smart cast to 'Type' is impossible, because 'variable' is a muta]]></description><category></category></item><item><title><![CDATA[解决Android Studio cannot open this project, please retry with Android Studio 3.6 or new]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/105817210</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/105817210</guid><author>i_nclude</author><pubDate>Tue, 28 Apr 2020 16:46:37 +0800</pubDate><description><![CDATA[出现此现象，要不是因为gradle的版本太高了，要不是android studio的版本太低了
总之得改一个，这里我修改的是gradle的版本，不升级android studio，还是不吃螃蟹的好。

gradle-wrapper.properties 的版本也太高了

参考链接

...]]></description><category></category></item><item><title><![CDATA[解决Only the original thread that created a view hierarchy can touch its views]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/105563688</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/105563688</guid><author>i_nclude</author><pubDate>Thu, 16 Apr 2020 17:55:13 +0800</pubDate><description><![CDATA[Only the original thread that created a view hierarchy can touch its views
出现原因：回调接口在子线程，并在回调接口对UI进行了操作
所以，将会出现上述提示
一般来讲，会使用handle解决这个问题
在对应的回调接口根据网络请求返回的数据来传递不同的消息
handler.sendMessage(msg);

再根据消息的内容...]]></description><category></category></item><item><title><![CDATA[android studio使用及目录简介]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/74857657</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/74857657</guid><author>i_nclude</author><pubDate>Thu, 16 Apr 2020 16:16:34 +0800</pubDate><description><![CDATA[目录简介]]></description><category></category></item><item><title><![CDATA[如何创建android studio项目及线性布局]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/74857691</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/74857691</guid><author>i_nclude</author><pubDate>Thu, 16 Apr 2020 16:16:28 +0800</pubDate><description><![CDATA[创建项目注意事项及线性布局的属性]]></description><category></category></item><item><title><![CDATA[深刻理解Activity的生命周期和onSaveInstanceState()]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/74936446</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/74936446</guid><author>i_nclude</author><pubDate>Thu, 16 Apr 2020 16:16:21 +0800</pubDate><description><![CDATA[活动的生命周期]]></description><category></category></item><item><title><![CDATA[Activity四大启动模式详解]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/74996979</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/74996979</guid><author>i_nclude</author><pubDate>Thu, 16 Apr 2020 16:16:12 +0800</pubDate><description><![CDATA[活动的启动模式]]></description><category></category></item><item><title><![CDATA[android中常用控件的使用方法：]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/75091215</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/75091215</guid><author>i_nclude</author><pubDate>Thu, 16 Apr 2020 16:15:58 +0800</pubDate><description><![CDATA[控件]]></description><category></category></item><item><title><![CDATA[Android之ProgressBar的使用]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/75143788</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/75143788</guid><author>i_nclude</author><pubDate>Thu, 16 Apr 2020 16:15:42 +0800</pubDate><description><![CDATA[ProgressBar]]></description><category></category></item><item><title><![CDATA[Android之布局详解]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/75208974</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/75208974</guid><author>i_nclude</author><pubDate>Thu, 16 Apr 2020 16:14:53 +0800</pubDate><description><![CDATA[四种基本布局]]></description><category></category></item><item><title><![CDATA[Android之创建ListView自定义控件]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/75263636</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/75263636</guid><author>i_nclude</author><pubDate>Thu, 16 Apr 2020 16:14:43 +0800</pubDate><description><![CDATA[创建自定义控件]]></description><category></category></item><item><title><![CDATA[Android之提升ListView的运行效率]]></title><link>https://blog.youkuaiyun.com/i_nclude/article/details/75267993</link><guid>https://blog.youkuaiyun.com/i_nclude/article/details/75267993</guid><author>i_nclude</author><pubDate>Thu, 16 Apr 2020 16:14:34 +0800</pubDate><description><![CDATA[提升运行效率]]></description><category></category></item></channel></rss>