<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[json_it的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/json_it</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; json_it]]></copyright><item><title><![CDATA[JetPack学习笔记之DataBinding]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/107946810</link><guid>https://blog.youkuaiyun.com/json_it/article/details/107946810</guid><author>json_it</author><pubDate>Sun, 16 Aug 2020 18:55:20 +0800</pubDate><description><![CDATA[概念

DataBinding是Google为了Android能够更好地实现MVVM架构而设计的，可以减轻页面（Activity/Fragment）的工作量，让布局承担一部分原本属于页面的工作。有如下特点：

项目更简洁，可读性更高
	不再需要findViewById
	UI控件能直接与数据模型中的字段绑定，甚至能响应用户的交互
基本使用


...]]></description><category></category></item><item><title><![CDATA[JetPack学习笔记之LiveData]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/107898107</link><guid>https://blog.youkuaiyun.com/json_it/article/details/107898107</guid><author>json_it</author><pubDate>Sun, 09 Aug 2020 20:46:15 +0800</pubDate><description><![CDATA[概念

在JetPack学习笔记之ViewModel中，当数据发生变化时，我们是可以采用接口的方式实现对页面的通知的，比如将计数显示到Activity中。通过接口的方式对页面进行通知是可行的，但如果要观察的数据很多，则需要定义大量的接口，代码显得十分冗余。为此，Jetpack提供了LiveData组件。

LiveData是一个可被观察的数据容器类。具体来说，可以将LiveData理解为一个数据的容器，它将数据包装起来，是数据成为被观察者，当该数据发生变化时，观察者能够获得通知。我们不需要自己去实现观察者模]]></description><category></category></item><item><title><![CDATA[Jetpack学习笔记之ViewModel]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/107890117</link><guid>https://blog.youkuaiyun.com/json_it/article/details/107890117</guid><author>json_it</author><pubDate>Sun, 09 Aug 2020 18:03:08 +0800</pubDate><description><![CDATA[概念

Android为我们提供了ViewModel类，专门用于存放应用程序页面所需的数据。也可以这样理解：它是介于View和Model之间的一个东西。它起到了桥梁的作用，使视图和数据既能分离开，也能够保持通信。这样更符合“单一职责原则”，页面负责展示数据以及处理用户交互。

官方注释：


ViewModels usually expose this information via {@link LiveData} or Android Data
Binding. You can also use any]]></description><category></category></item><item><title><![CDATA[JetPack学习笔记之LifeCycle原理]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/107885146</link><guid>https://blog.youkuaiyun.com/json_it/article/details/107885146</guid><author>json_it</author><pubDate>Sat, 08 Aug 2020 23:42:24 +0800</pubDate><description><![CDATA[基本概念



LifeCycle的原理

Jetpack为我们提供了两个接口：LifecycleOwner（被观察者）和LifecycleObserver（观察者）。即通过观察者模式，实现对页面生命周期的监听。

- LifeCycleOwner


public interface LifecycleOwner {
    /**
     * Returns the Lifecycle of the provider.
     *
     * @return The lifecycle of ..]]></description><category></category></item><item><title><![CDATA[嵌套滑动温习小结]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/103541847</link><guid>https://blog.youkuaiyun.com/json_it/article/details/103541847</guid><author>json_it</author><pubDate>Sat, 14 Dec 2019 22:24:04 +0800</pubDate><description><![CDATA[NestedScrollingParent：以下简称“NSP”，NestedScrollingChild：以下简称“NSC”，这两个接口是嵌套滑动的精髓，是我们实现嵌套滑动遵守的“规则”。

NOTE：本博文非详细原理篇，原理分析网上资料很多！！

与传统事件分发相比，好在哪？

方向维度
  - 传统事件分发机制

   方向：父控件 -&gt; 子控件，且是一锤子买卖，即事件总是先...]]></description><category></category></item><item><title><![CDATA[自定义View、ViewGroup（温习&实战&笔记）]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/103217973</link><guid>https://blog.youkuaiyun.com/json_it/article/details/103217973</guid><author>json_it</author><pubDate>Sun, 24 Nov 2019 00:12:35 +0800</pubDate><description><![CDATA[自定义View、ViewGroup的最基本的支持要点


	自定义View - onMeasure、onDraw
	

	wrap_content；
	
	padding；
自定义ViewGroup -onMeasure、onLayout
wrap_content；
	padding；
	margin；
为啥View只需支持padding，而ViewGroup需要支持padding和margin...]]></description><category></category></item><item><title><![CDATA[重温Android中的线程、线程池源码]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/102618547</link><guid>https://blog.youkuaiyun.com/json_it/article/details/102618547</guid><author>json_it</author><pubDate>Tue, 22 Oct 2019 08:39:41 +0800</pubDate><description><![CDATA[本篇博文涉及到的一些Android中常用的线程相关知识，源码也比较简单，作为重温笔记。

Android中的线程、线程池,，如下图所示：



AsyncTask

        

上述方法的执行顺序是：1 -&gt; 2-&gt; 3-&gt; 4

对于AsyncTask有如下几点可以从源码中得到验证

AsyncTask的对象必须在主线程中创建（非必须，后面会...]]></description><category></category></item><item><title><![CDATA[Android 事件传递流程 - 基于WMS、IMS、ViewRootImpl等学习笔记]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/100715898</link><guid>https://blog.youkuaiyun.com/json_it/article/details/100715898</guid><author>json_it</author><pubDate>Sat, 14 Sep 2019 13:52:48 +0800</pubDate><description><![CDATA[概述

在Android中，Touch事件的分发分服务端和应用端。在服务端由WindowManagerService（借助InputManagerService）负责采集和分发的，在应用端则是由ViewRootImpl（内部有一个mView变量指向View树的根，负责控制View树的UI绘制和事件消息的分发）负责分发的。

WMS在启动之后，经过逐层的调用，在Native层启动两个线程：Input...]]></description><category></category></item><item><title><![CDATA[Android系统启动学习随记]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/100686865</link><guid>https://blog.youkuaiyun.com/json_it/article/details/100686865</guid><author>json_it</author><pubDate>Tue, 10 Sep 2019 07:47:10 +0800</pubDate><description><![CDATA[init进程

init进程是Android系统中用户空间的第一个进程，作为第一个进程，它被赋予了很多极其重要的工作职责，比如创建zygote(孵化器)和属性服务等。init进程是由多个源文件共同组成的，这些文件位于源码目录system/core/init。

Zygote进程

在Android系统中，DVM(Dalvik虚拟机)、应用程序进程以及运行系统的关键服务的SystemServer进程...]]></description><category></category></item><item><title><![CDATA[Window和WindowManager学习笔记]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/100550790</link><guid>https://blog.youkuaiyun.com/json_it/article/details/100550790</guid><author>json_it</author><pubDate>Sat, 07 Sep 2019 18:16:17 +0800</pubDate><description><![CDATA[Window

Window表示一个窗口的概念，同时Window也是一个抽象的概念，Window是一个抽象类，其具体实现是PhoneWindow。


/**
 * Abstract base class for a top-level window look and behavior policy.  An
 * instance of this class should be used as ...]]></description><category></category></item><item><title><![CDATA[React Native学习速记]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/90631729</link><guid>https://blog.youkuaiyun.com/json_it/article/details/90631729</guid><author>json_it</author><pubDate>Fri, 09 Aug 2019 07:37:32 +0800</pubDate><description><![CDATA[学习路线建议：ES5/6 -&gt; React -&gt; React Native -&gt; Redux + React-Navigation等

ES5：https://wangdoc.com/javascript/
	ES6：http://es6.ruanyifeng.com/
	React/ React Native ：官方文档即可 -https://reactnative.cn...]]></description><category></category></item><item><title><![CDATA[Android IPC原理分析小结]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/98022989</link><guid>https://blog.youkuaiyun.com/json_it/article/details/98022989</guid><author>json_it</author><pubDate>Sat, 03 Aug 2019 13:44:38 +0800</pubDate><description><![CDATA[简介

理解Android的跨进程通信原理的关键是Binder。Binder是Android中独有的跨进程通信方式，底层的支持是Binder Driver，需要知道的是Linux 内核中并不包含Binder Driver，也就是说Linux并不对Android中的Binder跨进程通信方式提供支持。

跨进程通信是需要内核空间作为支持的。传统的IPC机制如管道、Socket都是内核的一部分，因此通...]]></description><category></category></item><item><title><![CDATA[自定义View - 三大流程 - 学习小结]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/97530530</link><guid>https://blog.youkuaiyun.com/json_it/article/details/97530530</guid><author>json_it</author><pubDate>Sat, 27 Jul 2019 21:55:35 +0800</pubDate><description><![CDATA[学习资源来源：https://www.jianshu.com/nb/9976005

measure、draw均为调度方法。具体的施工由onMeasure、onDraw实现。

layout方法确定View本身的位置，而onLayout方法会确定所有子元素的位置；因此，对于单一View的layout过程：由于单一View是没有子View的，故onLayout（）是一个空实现，具体布局实现在layo...]]></description><category></category></item><item><title><![CDATA[自定义View、事件体系等基础温习笔记]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/96952131</link><guid>https://blog.youkuaiyun.com/json_it/article/details/96952131</guid><author>json_it</author><pubDate>Thu, 25 Jul 2019 08:35:43 +0800</pubDate><description><![CDATA[学习笔记，备忘。完整学习资源：hencoder

一、Canvas 的 drawXXX() 系列方法及Paint最常见的使用

Canvas类下的所有的draw-打头的方法
绘制常规的指定图形：drawCircle、drawBitmap等
	绘制自定义图形：drawPath(Path path, Paint paint)
Path的相关方法，细分为两类：

addXxx - 添加子图形，如ad...]]></description><category></category></item><item><title><![CDATA[Flutter 入门项目 - 实战 + 分析]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/95042706</link><guid>https://blog.youkuaiyun.com/json_it/article/details/95042706</guid><author>json_it</author><pubDate>Mon, 08 Jul 2019 18:57:00 +0800</pubDate><description><![CDATA[一、效果图



项目地址：https://github.com/sparkerandroid/wanandroid_flutter

项目使用的接口：玩安卓、Gank，开放的api。感谢。

二、项目概览



dao：通过http，负责接口的调用；

model：数据解析；

navigator：页面导航；

pages：页面；

util：工具类，比如webView的封装；

widget：...]]></description><category></category></item><item><title><![CDATA[Flutter 布局 - UI - 官方文档 - 学习速记（二）]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/93071109</link><guid>https://blog.youkuaiyun.com/json_it/article/details/93071109</guid><author>json_it</author><pubDate>Sun, 07 Jul 2019 11:55:53 +0800</pubDate><description><![CDATA[widget与Element
在Flutter中，Widget的功能是“描述一个UI元素的配置数据”。即：Widget其实并不是表示最终绘制在设备屏幕上的显示元素，而只是显示元素的一个配置数据。实际上，Flutter中真正代表屏幕上显示元素的类是Element，也就是说Widget只是描述Element的一个配置。

总结：

Widget实际上就是Element的配置数据，Widget树实际上是...]]></description><category></category></item><item><title><![CDATA[Flutter 布局 - UI - 官方文档 - 学习速记(一)]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/92760134</link><guid>https://blog.youkuaiyun.com/json_it/article/details/92760134</guid><author>json_it</author><pubDate>Wed, 19 Jun 2019 17:53:16 +0800</pubDate><description><![CDATA[设置crossAxisAlignment属性值为CrossAxisAlignment.start，这会将该列中的子项左对齐。
	获取主题色：Theme.of(context).primaryColor;
	
 // The theme depends on the BuildContext because different parts of the tree
    // can have di...]]></description><category></category></item><item><title><![CDATA[flutter入门 - 基础 - 学习笔记]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/88883346</link><guid>https://blog.youkuaiyun.com/json_it/article/details/88883346</guid><author>json_it</author><pubDate>Wed, 22 May 2019 06:36:46 +0800</pubDate><description><![CDATA[Fultter学习资源相关：

入门必备 - Dart、Dart学习笔记
	Flutter中文网、英文官网
	一本不错的入门电子书籍
	Flutter开发必备 - Dart仓库，你需要的这里都有
	清华大学Flutter镜像
	flutter SDK 中examples文件夹下的各个示例项目
学习路线建议：Dart -&gt; Flutter【直接品尝官方学习文档即可轻松入门 - 利用上述学习资源...]]></description><category></category></item><item><title><![CDATA[Dart2基础]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/90077923</link><guid>https://blog.youkuaiyun.com/json_it/article/details/90077923</guid><author>json_it</author><pubDate>Tue, 21 May 2019 08:37:51 +0800</pubDate><description><![CDATA[学习Flutter的第一步是学习Dart语言，然后才是学习Flutter本身。如果你学习KotlinOr Java，那么学习起来很容易入门。因为你会看到很多你熟悉的语法。

仅做学习笔记，详细内容可品尝：

英文官网：https://dart.dev/guides/language/language-tour

中文：https://dartcn.com/guides/language/lan...]]></description><category></category></item><item><title><![CDATA[“自动抢红包”、“智能安装”的本质 - 辅助服务(Accessibility Service)]]></title><link>https://blog.youkuaiyun.com/json_it/article/details/89714239</link><guid>https://blog.youkuaiyun.com/json_it/article/details/89714239</guid><author>json_it</author><pubDate>Tue, 30 Apr 2019 19:09:48 +0800</pubDate><description><![CDATA[一、辅助服务的本质

辅助服务是谷歌推出旨在帮助身体残疾或不方便操作手机的人，更好的和设备进行交互。国内环境下，对于辅助服务的使用似乎偏离的谷歌的初衷，比如“自动抢红包”等，感觉被玩坏了。



从技术的角度看，辅助服务的本质就是一个Service，只是这个Service比较特殊，为什么这么说呢？因为这个Service只能由系统绑定，即生命周期由系统管理。还有一点就是辅助服务的启用，必须用户手动开...]]></description><category></category></item></channel></rss>