<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[kg_2012的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/kg_2012</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; kg_2012]]></copyright><item><title><![CDATA[View从调用invalidate到draw经历的主要流程]]></title><link>https://blog.youkuaiyun.com/kg_2012/article/details/107734761</link><guid>https://blog.youkuaiyun.com/kg_2012/article/details/107734761</guid><author>kg_2012</author><pubDate>Sat, 01 Aug 2020 18:23:02 +0800</pubDate><description><![CDATA[话不多说，先上时序图。





View调用invalidate()后到执行它的draw()方法主要经历了如图所示的流程，这里面主要涉及到了View、ViewRootImpl、MessageQueue(Handler这一整套)、Choreographer、DisplayEventReceiver这几个模块，其实这里的每一个模块都是比较复杂的，本文从View调用invalidate()到执行它的draw()方法这一流程视角分析一下这些模块的联系。

android的视图是View的树状结构。View调用i.]]></description><category></category></item><item><title><![CDATA[关于判空逻辑的思考]]></title><link>https://blog.youkuaiyun.com/kg_2012/article/details/106467001</link><guid>https://blog.youkuaiyun.com/kg_2012/article/details/106467001</guid><author>kg_2012</author><pubDate>Mon, 01 Jun 2020 10:07:53 +0800</pubDate><description><![CDATA[工作五年来，经历过两款线上App的android端开发，并且都是大厂的产品。发现代码中有大量的判空逻辑，有的地方甚至已经到了令人发指的程度，几乎每个变量的使用都有判空逻辑。空指针异常号称“billion-dollar mistake”，在代码中随处可见；但是空指针异常也非常“容易解决”，如果只是解决空指针异常这个crash只需要一行判空代码就可以了，但是这种解决办法常常会导致显示的异常，例如：该有的信息没有显示出来、展示一个空页面、一个“网络错误请重试”的tips等。

线上app代码满是判...]]></description><category></category></item><item><title><![CDATA[android View架构总结]]></title><link>https://blog.youkuaiyun.com/kg_2012/article/details/84891293</link><guid>https://blog.youkuaiyun.com/kg_2012/article/details/84891293</guid><author>kg_2012</author><pubDate>Sat, 08 Dec 2018 12:13:50 +0800</pubDate><description><![CDATA[View的特点是灵活，每次学习View的时候都感觉学懂了；但是在实际开发的时候总也会遇到一些View的问题感觉比较神奇，最近在组内做了一个关于View的分享，主要是从View的绘制和View的事件传递两个方面介绍View的体系架构。



一.View绘制流程



 





 



 











 

二.View事件传递流程













...]]></description><category></category></item><item><title><![CDATA[MVC、MVP、MVVM总结]]></title><link>https://blog.youkuaiyun.com/kg_2012/article/details/83268642</link><guid>https://blog.youkuaiyun.com/kg_2012/article/details/83268642</guid><author>kg_2012</author><pubDate>Mon, 22 Oct 2018 09:54:59 +0800</pubDate><description><![CDATA[1.MVC定义(总结自Head First设计模式)

MVC架构像一块夹心饼干，视图和模型是上下的饼干层；控制器是中间的奶油层，负责黏连视图和模型。

                              

MVC架构的目的是实现UI模块、数据模块、业务逻辑模块的解耦，在MVC架构内部利用了其它的设计模式。模型利用“观察者”让控制器和视图可以随最新的状态改变而更新；视图和控制器实现了“策...]]></description><category></category></item><item><title><![CDATA[android View移动总结]]></title><link>https://blog.youkuaiyun.com/kg_2012/article/details/81776871</link><guid>https://blog.youkuaiyun.com/kg_2012/article/details/81776871</guid><author>kg_2012</author><pubDate>Fri, 17 Aug 2018 14:20:38 +0800</pubDate><description><![CDATA[android中View的移动分为两种，View位置的移动和View内容的移动。

一、 View位置移动的方法

修改mTranslationX或mTranslationY的值
	设置MarginLayoutParams的margin值
	设置ViewGroup.LayoutParams的width或height
	设置View的mLeft、mRight、mTop、mBottom
	对Matri...]]></description><category></category></item><item><title><![CDATA[Android事件传递总结]]></title><link>https://blog.youkuaiyun.com/kg_2012/article/details/80426490</link><guid>https://blog.youkuaiyun.com/kg_2012/article/details/80426490</guid><author>kg_2012</author><pubDate>Wed, 23 May 2018 21:32:54 +0800</pubDate><description><![CDATA[Android中事件传递机制是非常重要但又很复杂的一个知识点，在实现一些自定义View、处理滑动冲突时都需要复写事件传递相关的函数。本文总结了不同事件的传递过程，至于事件传递的dispatchTouchEvent()、onInterceptTouchEvent()、onTouchEvent()这三个函数的具体实现可以阅读源码。

 

Android中的事件分为以下几种 ACTION_DOWN、A...]]></description><category></category></item><item><title><![CDATA[volatile关键字详解]]></title><link>https://blog.youkuaiyun.com/kg_2012/article/details/79059909</link><guid>https://blog.youkuaiyun.com/kg_2012/article/details/79059909</guid><author>kg_2012</author><pubDate>Sun, 14 Jan 2018 22:27:43 +0800</pubDate><description><![CDATA[关键字volatile是Java虚拟机提供的最轻量级的同步机制。在Java API应用层，对volatile关键字的描述是具备以下两个特点：
(1)保证此变量对所有线程的可见性，这里的“可见性”是指当一条线程修改了这个变量的值，新值对于其它线程来说是立即得知的。
(2)禁止指令重排序优化。
    那么虚拟机是如何实现volatile关键字这两条特性的呢？这首先要从Java内存模型说起。
]]></description><category></category></item><item><title><![CDATA[ListView嵌套卡顿问题分析及解决]]></title><link>https://blog.youkuaiyun.com/kg_2012/article/details/78676103</link><guid>https://blog.youkuaiyun.com/kg_2012/article/details/78676103</guid><author>kg_2012</author><pubDate>Thu, 30 Nov 2017 14:46:26 +0800</pubDate><description><![CDATA[最重要的是在架构设计的时候尽量避免LiveView嵌套情况的发生，因为ListView嵌套后，在一些手机上会发生卡顿现象，而且不容易解决。然而，由于产品的设计，或者界面越来越复杂，有的时候ListView嵌套还是不可避免的发生了；ListView嵌套后刷新ListView时在一些手机上会发生比较明显的卡顿现象。卡顿发生后，首先要确认卡顿发生的原因。通过打印日志的方式，观察一下调用Adapter的no]]></description><category></category></item><item><title><![CDATA[Android自定义View的动画实现方法]]></title><link>https://blog.youkuaiyun.com/kg_2012/article/details/78033059</link><guid>https://blog.youkuaiyun.com/kg_2012/article/details/78033059</guid><author>kg_2012</author><pubDate>Tue, 19 Sep 2017 18:16:36 +0800</pubDate><description><![CDATA[在自定义的柱状图中实现动画的两种方法：第一种方法，通过延时调用invalidate()方法；第二种方法，通过属性动画实现。]]></description><category></category></item><item><title><![CDATA[Activity ActivityManagerService以及WindowManagerService之间的关系]]></title><link>https://blog.youkuaiyun.com/kg_2012/article/details/77600367</link><guid>https://blog.youkuaiyun.com/kg_2012/article/details/77600367</guid><author>kg_2012</author><pubDate>Sat, 26 Aug 2017 12:02:38 +0800</pubDate><description><![CDATA[本文，通过应用程序开始启动到第一个Activity的View内容在手机屏幕上完全展示出来的过程讲述Activity、ActivityManagerService、WindowManagerService三者之间如何发生关系的。]]></description><category></category></item><item><title><![CDATA[android项目中引入CoordinatorLayout控件问题总结]]></title><link>https://blog.youkuaiyun.com/kg_2012/article/details/75315328</link><guid>https://blog.youkuaiyun.com/kg_2012/article/details/75315328</guid><author>kg_2012</author><pubDate>Tue, 18 Jul 2017 18:22:40 +0800</pubDate><description><![CDATA[在工程中导入support-v7包后，产生了依赖冲突，通过修改依赖库文件的版本号解决了依赖冲突问题。在使用CoordinatorLayout的过程中，不能使头部的View和ListView联动滑动。]]></description><category></category></item><item><title><![CDATA[根据文本内容的长度动态的设置TextView的高度]]></title><link>https://blog.youkuaiyun.com/kg_2012/article/details/73863801</link><guid>https://blog.youkuaiyun.com/kg_2012/article/details/73863801</guid><author>kg_2012</author><pubDate>Wed, 28 Jun 2017 20:39:53 +0800</pubDate><description><![CDATA[在做Android开发中，经常需要根据文本内容的长度和手机屏幕的大小动态的设置TextView的高度。设置TextView的高度后，再设置TextView可以滑动，就可以展示完整的文本，但是TextView的滑动效果不流畅；可以给TextView外层包一个ScrollView，通过设置ScrollView的高度，通过ScrollView的滑动展示完整的文本内容。 
根据文本内容的长度设置TextVi]]></description><category></category></item><item><title><![CDATA[Binder通信学习总结]]></title><link>https://blog.youkuaiyun.com/kg_2012/article/details/55805487</link><guid>https://blog.youkuaiyun.com/kg_2012/article/details/55805487</guid><author>kg_2012</author><pubDate>Sun, 19 Feb 2017 16:20:20 +0800</pubDate><description><![CDATA[本文是笔者学习Binder通信机制的要点总结，并没有对Binder通信机制进行详细的介绍。描述了Binder机制的四大模块，以及Binder通信的主要特点：数据传递单向性和数据拷贝一次。]]></description><category></category></item><item><title><![CDATA[可滑动Header控件的实现]]></title><link>https://blog.youkuaiyun.com/kg_2012/article/details/53385218</link><guid>https://blog.youkuaiyun.com/kg_2012/article/details/53385218</guid><author>kg_2012</author><pubDate>Mon, 28 Nov 2016 21:41:20 +0800</pubDate><description><![CDATA[本文从滑动冲突产生的原因、解决方案以及代码实现过程三个方面，介绍了可滑动Header控件的实现过程。]]></description><category></category></item><item><title><![CDATA[Android 监听软键盘的显示与隐藏]]></title><link>https://blog.youkuaiyun.com/kg_2012/article/details/52613899</link><guid>https://blog.youkuaiyun.com/kg_2012/article/details/52613899</guid><author>kg_2012</author><pubDate>Wed, 21 Sep 2016 21:56:06 +0800</pubDate><description><![CDATA[在Android开发中，经常需要监听软键盘的显示状态，而有时候键盘的显示或隐藏是由系统自动调用触发的，但是对系统自动触发的软键盘的显示或隐藏不太方便监听。今天介绍两种监听软键盘显示和隐藏的方法。第1种方法： 
给布局文件最外层的View(在本文中成为mMainView)添加addOnLayoutChangeListener监听，官方文档对该接口的解释是： 
Add a listener that w]]></description><category></category></item><item><title><![CDATA[ListView恢复位置]]></title><link>https://blog.youkuaiyun.com/kg_2012/article/details/52215059</link><guid>https://blog.youkuaiyun.com/kg_2012/article/details/52215059</guid><author>kg_2012</author><pubDate>Mon, 15 Aug 2016 21:44:00 +0800</pubDate><description><![CDATA[在一个ListView里面切换tab，两个tab显示的数据的数据对象一样，只是数据类型不一样，两个tab共用了一个ListView实例和一个Adapter实例。在切换tab的时候恢复ListView在该tab中上一次的位置。]]></description><category></category></item></channel></rss>