<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[LilllS的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/LilllS</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; LilllS]]></copyright><item><title><![CDATA[几种导致内存泄漏的常见错误]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/105264906</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/105264906</guid><author>LilllS</author><pubDate>Thu, 02 Apr 2020 11:03:39 +0800</pubDate><description><![CDATA[几种导致内存泄漏的常见错误
Broadcast Receiver等未进行unregister
例如：当你在Activity中register broadcast receiver，假如你没有unregister the broadcast receiver,及时你关闭了Activity，仍然会持有Activity的引用
静态变量持有Activity、View或者大数据对象
例如：无论什么原因你生命...]]></description><category></category></item><item><title><![CDATA[线程池ThreadPoolExecutor简介]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/103400154</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/103400154</guid><author>LilllS</author><pubDate>Thu, 05 Dec 2019 10:38:32 +0800</pubDate><description><![CDATA[线程池ThreadPoolExecutor简介
线程池的实现方式
java中实现线程池的类主要是ThreadPoolExecutor这个类
主要的构造方法有

来看一下最全的构造方法
 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, Blockin...]]></description><category></category></item><item><title><![CDATA[Mac配置oh my zsh,并使用ITerm2]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/103086199</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/103086199</guid><author>LilllS</author><pubDate>Fri, 15 Nov 2019 15:25:16 +0800</pubDate><description><![CDATA[Mac配置oh my zsh,并使用ITerm2
先看看最终效果



第一步安装on my zsh
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"



切换为zsh
 sudo chsh -s /bin/zsh



更换主题
在命令行用vim打开用户根目录下...]]></description><category></category></item><item><title><![CDATA[详解Handler机制]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/103074364</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/103074364</guid><author>LilllS</author><pubDate>Thu, 14 Nov 2019 20:27:55 +0800</pubDate><description><![CDATA[Handler详解

文中源码基于API 28,且部分有删减

Handler有什么用? 为什么要用Handler?
Android应用程序运行时会创建一个主线程就是我们常说的UI线程,而更新UI的操作只能在主线程进行.但是实际开发中,一些网络请求和耗时操作都要到子线程中进行,获取到执行结果之后想去修改]UI是不行的,所以Android设计了Handler,通过消息的机制来实现线程之间的通讯.
为...]]></description><category></category></item><item><title><![CDATA[Flutter底部导航栏之BottomNavigationBar]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/85101727</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/85101727</guid><author>LilllS</author><pubDate>Wed, 19 Dec 2018 17:09:51 +0800</pubDate><description><![CDATA[实现的方式
​	因为Flutter的widget分为StatelessWidget和StatefulWidget.我们使用底部导航栏肯定是通过点击底部的导航按钮来实现页面的更改,所以包含BottomNavigationBar的Widget必须是一个StatefulWidget.
​	因为Scaffold这个widget中默认对BottomNavigationBar支持.所以直接用Scaffold就...]]></description><category></category></item><item><title><![CDATA[Flutter布局之Container]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/85054819</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/85054819</guid><author>LilllS</author><pubDate>Mon, 17 Dec 2018 19:41:34 +0800</pubDate><description><![CDATA[Container
简介
​	官方给出的简介，是一个结合了绘制（painting）、定位（positioning）以及尺寸（sizing）widget的widget。
布局特点

如果没有子节点、没有设置width、height以及constraints，并且父节点没有设置unbounded的限制，Container会将自身调整到足够小。
如果没有子节点、对齐方式（alignment），但是提供了...]]></description><category></category></item><item><title><![CDATA[git cherry-pick操作]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/85050206</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/85050206</guid><author>LilllS</author><pubDate>Mon, 17 Dec 2018 15:29:35 +0800</pubDate><description><![CDATA[定义
把一个commit从一个分支拿到另一个分支.相当于只merge一次commit

解决的实际问题
假如我在branch1分支上有一个commit,如何把它放到master分支上
或者是我在branch1有两个commit,如何把其中一个commit拿到master分支上.

用法
在branch1上查看commit的id,例如是8d63abdcf7c331a5c29e392fa1fa85a2...]]></description><category></category></item><item><title><![CDATA[git reset  --hard --soft --mixed区别]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/85007596</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/85007596</guid><author>LilllS</author><pubDate>Fri, 14 Dec 2018 17:53:00 +0800</pubDate><description><![CDATA[使用方法
git --mixed/--hard/--soft  41e1d58739a5ab280b5b2dbde107c14aeeb0b6d2

git --soft
只是删除某次提交,再次提交直接commit即可

git --mixed
删除某次提交,并且回到add之前的状态,再次提交先add  在commit

git --hard
删除末次提交,并清空所有基于41e1d58739a5ab...]]></description><category></category></item><item><title><![CDATA[AIDL进行进程间通讯]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/83651855</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/83651855</guid><author>LilllS</author><pubDate>Fri, 02 Nov 2018 11:29:50 +0800</pubDate><description><![CDATA[AIDL进行进程间通讯
AIDL是一个缩写,全称是Android Interface Definition Language，也就是Android接口定义语言
在上一篇 使用Messenger进行跨应用(进程)通讯中,使用Messenger进行进程间通讯的时候,服务端是能一个个的处理客户端的请求,如果有大量的并发请求的时候,Messenger就不适用了.并且Messenegr只能传递消息,并不能跨...]]></description><category></category></item><item><title><![CDATA[使用Messenger进行跨应用(进程)通讯]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/83618265</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/83618265</guid><author>LilllS</author><pubDate>Thu, 01 Nov 2018 12:07:44 +0800</pubDate><description><![CDATA[使用Messenger进行跨进程通讯
Messenger可以翻译为信使,使用它我们可以进行跨进程通讯.Messengers是一种轻量的IPC,通过构造方法可以轻松的看出它的底层是现实AIDL.
public Messenger(Handler target) {
    mTarget = target.getIMessenger();
}

public Messenger(IBinder ta...]]></description><category></category></item><item><title><![CDATA[for循环,增强for循环与Iterator的比较]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/83418674</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/83418674</guid><author>LilllS</author><pubDate>Fri, 26 Oct 2018 17:47:41 +0800</pubDate><description><![CDATA[先看看他们的写法


普通for循环


ArrayList&amp;lt;String&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();
for (int i = 0; i &amp;lt; list.size(); i++) {
    String x = list.get(i);
    System.out.println(x);
}



增强for循环


ArrayList&amp;...]]></description><category></category></item><item><title><![CDATA[Collections.synchronizedList使用方法]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/83417333</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/83417333</guid><author>LilllS</author><pubDate>Fri, 26 Oct 2018 16:40:58 +0800</pubDate><description><![CDATA[ArrayList
众所周知ArrayList是非线程安全的,在多线程的情况下,向list插入数据的时候,可能会造成数据丢失的情况.并且一个线程在遍历List,另一个线程修改List,会报ConcurrentModificationException(并发修改异常)错误.

Vector
Vector是一个线程安全的List,但是它的线程安全实现方式是对所有操作都加上了synchronized关键...]]></description><category></category></item><item><title><![CDATA[OkHttp源码解析(二)之Interceptor]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/83351871</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/83351871</guid><author>LilllS</author><pubDate>Wed, 24 Oct 2018 22:12:41 +0800</pubDate><description><![CDATA[OkHttp中的Interceptors
getResponseWithInterceptorChain()
继续说getResponseWithInterceptorChain()方法
Response getResponseWithInterceptorChain() throws IOException {
  // Build a full stack of interceptors.
 ...]]></description><category></category></item><item><title><![CDATA[OkHttp源码解析(一)]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/83348079</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/83348079</guid><author>LilllS</author><pubDate>Wed, 24 Oct 2018 17:55:34 +0800</pubDate><description><![CDATA[简单使用
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
        .url(&amp;amp;amp;amp;amp;quot;https://api.github.com/search/repositories&amp;amp;amp;amp;amp;quot;)
        .build();

//执行请求的地方.
client.newCall(request)
...]]></description><category></category></item><item><title><![CDATA[Android 利用Annotation Processing 编译时通过注解自动生成代码]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/82868243</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/82868243</guid><author>LilllS</author><pubDate>Thu, 27 Sep 2018 15:42:35 +0800</pubDate><description><![CDATA[Android 编译时注解生成代码
类似ButterKnife的框架,时间有限只实现绑定View.利用 Annotation Processing,编译的过程中读取注解,然后使用JavePoet生成我们想要的代码

项目结构

依赖关系

左侧的的依赖是可以传递的
自动生成的代码
我们要自动生成这样的代码,代替我们findViewById的繁琐操作
public class MainActivit...]]></description><category></category></item><item><title><![CDATA[Java反射使用日记-getFields()和getDeclaredFields()的区别]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/82864562</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/82864562</guid><author>LilllS</author><pubDate>Thu, 27 Sep 2018 11:24:30 +0800</pubDate><description><![CDATA[getFields()
getFields()获得某个类的所有的公共（public）的字段，包括父类。


getDeclaredFields()
getDeclaredFields()获得某个类的所有申明的字段，即包括public、private和proteced，但是不包括父类的申明字段。


同样类似的还有getConstructors()和getDeclaredConstructors...]]></description><category></category></item><item><title><![CDATA[JAVA多线程面试题整理及答案]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/82837774</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/82837774</guid><author>LilllS</author><pubDate>Tue, 25 Sep 2018 12:04:18 +0800</pubDate><description><![CDATA[JAVA多线程面试题整理及答案
什么是线程,进程？
进程:进程就是一段程序的执行过程,进程是表示资源分配的基本单位，又是调度运行的基本单位.

进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元，在传统的操作系统中，进程既是基本的分配单元，也是基本的执行单元

线程:线程是进程中执行运算的最小单位，亦即执行处理机调度的基本单位,一个进程可以包含多个线程,...]]></description><category></category></item><item><title><![CDATA[使用Retrofit下载文件和上传文件]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/81273042</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/81273042</guid><author>LilllS</author><pubDate>Sun, 29 Jul 2018 17:15:11 +0800</pubDate><description><![CDATA[使用Retrofit下载文件和上传文件



上传



第一种 只有文件/图片的上传



/**
 * 上传图片
 */
@POST(&quot;room/fileUpload&quot;)
@Multipart
fun upload(@Part file: MultipartBody.Part): Observable&amp;lt;ResMsg&amp;gt;



private fun upload() {
      ...]]></description><category></category></item><item><title><![CDATA[EditText 修改光标颜色和宽度]]></title><link>https://blog.youkuaiyun.com/LilllS/article/details/81239361</link><guid>https://blog.youkuaiyun.com/LilllS/article/details/81239361</guid><author>LilllS</author><pubDate>Fri, 27 Jul 2018 16:12:48 +0800</pubDate><description><![CDATA[在android的输入框里，如果要修改光标的颜色及粗细步骤如下两步即可搞定：

1.在资源文件drawable下新建一个光标控制color_cursor.xml

&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;  
&amp;lt;shape xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; an...]]></description><category></category></item></channel></rss>