写给Android App开发人员看的Android底层知识(7)
转自包老师:http://www.cnblogs.com/Jax/p/6910699.html
(十二)ContentProvider
(1)ContentProvider是什么?
ContentProvider,简称CP。
做App开发的同学,尤其是电商类App,对CP并不熟悉,对这个概念的最大程度的了解,也仅仅是建立在书本上,它是Android四大组件中的一个。
做系统管理类的App,比如说手机助手这种,有机会频繁使用CP。
而对于应用类App,数据通常存在服务器端,其它应用类App也想使用的时候,一般都是从服务器取数据,所以没机会使用到CP。
有时候我们会在自己的App中读取通信录或者短信的数据,这时候就需要用到CP了。通信录或者短信的数据,是以CP的形式提供的,我们在App这边,是使用方。
对于做应用类App的同学,很少有机会自定义CP供其它App使用。
我们快速回顾一下在App中怎么使用CP。
1)定义CP的App1:
在App1中定义一个CP的子类MyContentProvider,并在Manifest中声明,为此要在MyContentProvider中实现CP的增删改查四个方法:
2)使用CP的App2:
在App2访问App1中定义的CP,为此,要使用到ContentResolver,它也提供了增删改查4个方法,用于访问App1中定义的CP:
首先我们看一下ContentResolver的增删改查这4个方法的底层实现,其实都是和AMS通信,最终调用App1的CP的增删改查4个方法,后面我们会讲到这个流程是怎么样的。
其次,URI是CP的身份证,唯一标识。
我们在App1中为CP声明URI,也就是authorities的值为baobao,那么在App2中想使用它,就在ContentResolver的增删改查4个方法中指定URI,格式为:
uri = Uri.parse(“content://baobao/”);
接下来把两个App都进入debug模式,就可以从App2调试进入App1了,比如说,query操作。
(2)CP的本质
CP的本质是把数据存储在SQLite数据库中。
各种数据源,有各种格式,比如短信、通信录,它们在SQLite中就是不同的数据表,但是对外界的使用者而言,就需要封装成统一的访问方式,比如说对于数据集合而言,必须要提供增删改查四个方法,于是我们在SQLite之上封装了一层,也就是CP。
(3)匿名共享内存(ASM)
CP读取数据使用到了匿名共享内存,英文简称ASM,所以你看上面CP和AMS通信忙的不亦乐乎,其实下面别有一番风景。
关于ASM的概念,它其实也是个Binder通信,我画个图哦,你们就明白了:
什么?还没看懂?那我再画一个类的交互关系图:
这里的CursorWindow就是匿名共享内存。
这个流程,简单来说是这样的:
1)Client内部有一个CursorWindow对象,发送请求的时候,把这个CursorWindow类型的对象传过去,这个对象暂时为空。
2)Server收到请求,搜集数据,填充到这个CursorWindow对象。
3)Client读取内部的这个CursorWindow对象,获取到数据。
由此可见,这个CursorWindow对象,就是匿名共享内存,这是同一块匿名内存。
举个生活中的例子就是,你定牛奶,在你家门口放个箱子,送牛奶的人每天早上往这个箱子放一袋牛奶,你睡醒了去箱子里取牛奶。这个牛奶箱就是匿名共享内存。
(4)CP与AMS的通信流程
接下来我们看一下CP是怎么和AMS通信的。
能坚持看到这里的人,都不容易。我努力多贴图,不贴代码,即使有代码,也是App开发人员能看懂的代码。
还是拿App2想访问App1中定义的CP为例子。我们就看CP的insert方法。
上面这5行代码,包括了启动CP和执行CP方法两部分,分水岭在insert方法,insert方法的实现,前半部分仍然是在启动CP,当CP启动后获取到CP的代理对象,后半部分是通过代理对象,调用insert方法。
整体的流程如下图所示:
1)App2发送消息给AMS,想要访问App1中的CP。
2)AMS检查发现,App1中的CP没启动过,为此新开一个进程,启动App1,然后获取到App1启动的CP,把CP的代理对象返回给App2。
3)App2拿到CP的代理对象,也就是IContentProvider,就调用它的增删改查4个方法了,接下来就是使用ASM来传输数据或者修改数据了,也就是上面提到的CursorWindow这个类,取得数据或者操作结果即可,作为App的开发人员,不需要知道太多底层的详细信息,用不上。
至此,关于CP的介绍就结束了。下一篇文章,我们看一下App的安装流程,也就PMS。
- 本文已收录于以下专栏:
-
写给Android App开发人员看的Android底层知识(1)
这是一组写给App开发人员看的系列文章,先后介绍了Binder、AIDL、四大组件、AMS、PMS等核心思想,以及App安装流程、App启动流程。因为面向的读者是App开发人员,所以尽量不贴底层的代码…- JspAndAsp
- 2017年05月19日 11:56
- 1414
-
Android APP开发字体更换
- qq_27757229
- 2017年10月30日 15:46
- 95
Android开发更换APP中的字体 今天来一起学习学习如何更换开发中的字体,开门见山: 右键点击main—>new—>Folder—>Assets Folder(简单地说就是…
-
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup=window.slotbydup || []).push({ id: '4765209', container: s, size: '808,120', display: 'inlay-fix' }); })();
.ad-text {padding:0px;}
-
Android app开发中刷新问题的详解
- android_bird_bird
- 2017年08月03日 23:35
- 96
private void init() {
//布局设置
mRvNewListLayout.setLayoutManager(new LinearLayoutManag…</dd> </a> </dl> <dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"> <a href="https://blog.csdn.net/Kenway090704/article/details/68944592" target="_blank" strategy="BlogCommendFromGuangxin_3"> <dd> <h2 style="margin-bottom: 0px;">Android app开发中的比较麻烦的坑(一)</h2> <ul class="floatR"> <li class="avatar_img"><img src="https://avatar.csdn.net/B/1/B/3_kenway090704.jpg" alt="Kenway090704" title="Kenway090704"></li> <li class="user_name">Kenway090704</li> <li class="time">2017年04月01日 14:56</li> <li class="visited_num"><i class="icon iconfont icon-read"></i><span>573</span></li> </ul><div class="summary"> 在开发中发现有许许多多的坑,每次解决后都没有记录,时间一长,这些坑再次出现的时候,发现突然忘了怎么解决的了,所以用一篇文章记录一下这些,开发中遇到的坑:
开启时白屏
代码块高亮
图片链接和图片上传
L…
</dd>
</a>
</dl>
<dl id="_b9i8mhfvu87"><div id="_f6slwtqtiyu" style="width: 100%;"><iframe id="iframeu3394176_1" name="iframeu3394176_1" src="https://pos.baidu.com/mcpm?conwid=800&conhei=100&rdid=3394176&dc=3&di=u3394176&dri=1&dis=0&dai=6&ps=2651x393&enu=encoding&dcb=___adblockplus&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1522652841751&ti=%E5%86%99%E7%BB%99Android%20App%E5%BC%80%E5%8F%91%E4%BA%BA%E5%91%98%E7%9C%8B%E7%9A%84Android%E5%BA%95%E5%B1%82%E7%9F%A5%E8%AF%86%EF%BC%887%EF%BC%89%20-%20CSDN%E5%8D%9A%E5%AE%A2&ari=2&dbv=2&drs=3&pcs=1903x949&pss=1903x5179&cfv=0&cpl=4&chi=9&cce=true&cec=UTF-8&tlm=1522652842&prot=2&rw=949&ltu=https%3A%2F%2Fblog.csdn.net%2Fqq_24531461%2Farticle%2Fdetails%2F72820328&ecd=1&uc=1920x1040&pis=-1x-1&sr=1920x1080&tcn=1522652843&qn=c1f2e572eca44348&tt=1522652841573.1087.1087.1087" width="800" height="100" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" style="border:0;vertical-align:bottom;margin:0;width:800px;height:100px" allowtransparency="true"></iframe></div><script type="text/javascript" src="https://cee1.iteye.com/lgyyocphf.js"></script><span style="display: none">ie</span>
-
[笔记分享] [Android] Android底层库和程序
- kris_fei
- 2017年08月27日 13:05
- 277
4.1 介绍
主要介绍Android底层库和程序结构,以及C语言基础库、init可执行程序、shell工具、C++基础库、Android系统进程等内容。
Android是跨Java和native(…
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/qq_24531461/article/details/72765567" target="_blank" strategy="BlogCommendFromQuerySearch_5">
<dd>
<h2>写给Android App开发人员看的Android底层知识(5)</h2>
<div class="summary">
转自包老师:http://www.cnblogs.com/Jax/p/6883549.html#top
(十)Service
Service有两套流程,一套是启…
<ul>
<li class="avatar_img"><img src="http://www.itdaan.com/imgs/3/6/5/3/22/80353fa759a3772b5efff03038d71057.jpe" alt="qq_24531461" title="qq_24531461"></li>
<li class="user_name">qq_24531461</li>
<li class="time">2017年05月26日 13:05</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>229</span></li>
</ul>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/qq_24531461/article/details/72763292" target="_blank" strategy="BlogCommendFromQuerySearch_6">
<dd>
<h2>写给Android App开发人员看的Android底层知识(3)</h2>
<div class="summary">
转自包老师:http://www.cnblogs.com/Jax/p/6880631.html
(七)App启动流程第2篇
书接上文,App启动一共有七个…
<ul>
<li class="avatar_img"><img src="http://www.itdaan.com/imgs/3/6/5/3/22/80353fa759a3772b5efff03038d71057.jpe" alt="qq_24531461" title="qq_24531461"></li>
<li class="user_name">qq_24531461</li>
<li class="time">2017年05月26日 09:20</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>208</span></li>
</ul>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/juncle113/article/details/78546625" target="_blank" strategy="BlogCommendFromQuerySearch_7">
<dd>
<h2 style="margin-bottom: 0px;">写给Android App开发人员看的Android底层知识</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/9/1/7/3_juncle113.jpg" alt="juncle113" title="juncle113"></li>
<li class="user_name">juncle113</li>
<li class="time">2017年11月16日 01:27</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>139</span></li>
</ul><div class="summary">
http://www.cnblogs.com/Jax/p/6864103.html </div>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/qq_24531461/article/details/72841480" target="_blank" strategy="BlogCommendFromQuerySearch_8">
<dd>
<h2>写给Android App开发人员看的Android底层知识(8)</h2>
<div class="summary">
转自包老师:http://www.cnblogs.com/Jax/p/6910745.html
(十)PMS及App安装过程
PMS,全称PackageManag…
<ul>
<li class="avatar_img"><img src="http://www.itdaan.com/imgs/3/6/5/3/22/80353fa759a3772b5efff03038d71057.jpe" alt="qq_24531461" title="qq_24531461"></li>
<li class="user_name">qq_24531461</li>
<li class="time">2017年06月02日 09:56</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>309</span></li>
</ul>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/qq_24531461/article/details/72763301" target="_blank" strategy="BlogCommendFromQuerySearch_9">
<dd>
<h2>写给Android App开发人员看的Android底层知识(4)</h2>
<div class="summary">
转自包老师:http://www.cnblogs.com/Jax/p/6880647.html
(八)App内部的页面跳转
在介绍完App的启动流程后,我…
<ul>
<li class="avatar_img"><img src="http://www.itdaan.com/imgs/3/6/5/3/22/80353fa759a3772b5efff03038d71057.jpe" alt="qq_24531461" title="qq_24531461"></li>
<li class="user_name">qq_24531461</li>
<li class="time">2017年05月26日 09:21</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>177</span></li>
</ul>
</dd>
</a>
</dl><dl id="yd_a_d_feed_11" class="yd_a_d_feed_cla" style="height:124px;overflow: hidden;"><iframe scrolling="no" style="width: 100%; height: 90px; border: 0px;"></iframe></dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/qq_24531461/article/details/72792817" target="_blank" strategy="BlogCommendFromQuerySearch_10">
<dd>
<h2>写给Android App开发人员看的Android底层知识(6)</h2>
<div class="summary">
转自包老师:http://www.cnblogs.com/Jax/p/6883534.html
(十一)BroadcastReceiver
BroadcastReceiver,也就是广播,…
<ul>
<li class="avatar_img"><img src="http://www.itdaan.com/imgs/3/6/5/3/22/80353fa759a3772b5efff03038d71057.jpe" alt="qq_24531461" title="qq_24531461"></li>
<li class="user_name">qq_24531461</li>
<li class="time">2017年05月28日 13:54</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>499</span></li>
</ul>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/qq_24531461/article/details/72597740" target="_blank" strategy="BlogCommendFromQuerySearch_11">
<dd>
<h2>写给Android App开发人员看的Android底层知识(2)(转自包老师)</h2>
<div class="summary">
转自:包老师
(五)AMS
如果站在四大组件的角度来看,AMS就是Binder中的Server。
AMS全称是ActivityManagerService,看字面意思…
<ul>
<li class="avatar_img"><img src="http://www.itdaan.com/imgs/3/6/5/3/22/80353fa759a3772b5efff03038d71057.jpe" alt="qq_24531461" title="qq_24531461"></li>
<li class="user_name">qq_24531461</li>
<li class="time">2017年05月21日 12:24</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>532</span></li>
</ul>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/u010352111/article/details/53368537" target="_blank" strategy="BlogCommendFromQuerySearch_12">
<dd>
<h2>关于C++的那些事儿(一)--读《写给大忙人看的C++》</h2>
<div class="summary">
写给大忙人的C++ </div>
<ul>
<li class="avatar_img"><img src="https://avatar.csdn.net/8/7/5/3_u010352111.jpg" alt="u010352111" title="u010352111"></li>
<li class="user_name">u010352111</li>
<li class="time">2016年11月27日 22:42</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>537</span></li>
</ul>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/u014036303/article/details/73929616" target="_blank" strategy="BlogCommendFromQuerySearch_13">
<dd>
<h2 style="margin-bottom: 0px;">写给大忙人看的Java核心技术-Solutions提供</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/A/3/A/3_u014036303.jpg" alt="u014036303" title="u014036303"></li>
<li class="user_name">u014036303</li>
<li class="time">2017年06月30日 01:54</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>789</span></li>
</ul><div class="summary">
背景
书
源码
为啥写这玩意
地址
最后
背景最近在看Java API的源码,顺便码码字刷刷题。书《写给大忙人看的Java核心技术》书的内容很不错,适合有一定基础的童鞋看。源码在JDK安装包里,有一个…
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/heye13/article/details/49133595" target="_blank" strategy="BlogCommendFromQuerySearch_14">
<dd>
<h2 style="margin-bottom: 0px;">读《写给大家看的色彩书1》.设计配色基础1</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/A/2/2/3_heye13.jpg" alt="heye13" title="heye13"></li>
<li class="user_name">heye13</li>
<li class="time">2015年10月15日 09:40</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>1331</span></li>
</ul><div class="summary">
第一章:所有原则的基础:不要超过三种色彩
1、什么是HSB?
HSB模式是基于人眼视觉细胞的,即眼睛所看到的颜色,H(Hue)是色相,S(Staturation)是饱和度,B(Brightness)…
</dd>
</a>
</dl>
<dl id="_euftvvfqa5u"><iframe id="iframeu3394176_0" name="iframeu3394176_0" src="https://pos.baidu.com/mcpm?conwid=800&conhei=100&rdid=3394176&dc=3&di=u3394176&dri=0&dis=0&dai=5&ps=4362x373&enu=encoding&dcb=___adblockplus&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1522652841751&ti=%E5%86%99%E7%BB%99Android%20App%E5%BC%80%E5%8F%91%E4%BA%BA%E5%91%98%E7%9C%8B%E7%9A%84Android%E5%BA%95%E5%B1%82%E7%9F%A5%E8%AF%86%EF%BC%887%EF%BC%89%20-%20CSDN%E5%8D%9A%E5%AE%A2&ari=2&dbv=2&drs=3&pcs=1903x949&pss=1903x5055&cfv=0&cpl=4&chi=9&cce=true&cec=UTF-8&tlm=1522652842&prot=2&rw=949&ltu=https%3A%2F%2Fblog.csdn.net%2Fqq_24531461%2Farticle%2Fdetails%2F72820328&ecd=1&uc=1920x1040&pis=-1x-1&sr=1920x1080&tcn=1522652842&qn=c0dd5d06c607e7ae&tt=1522652841573.573.573.575" width="800" height="100" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" style="border:0;vertical-align:bottom;margin:0;width:800px;height:100px" allowtransparency="true"></iframe></dl><dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/kaxier5000/article/details/62039851" target="_blank" strategy="BlogCommendFromQuerySearch_15">
<dd>
<h2 style="margin-bottom: 0px;">《写给大忙人看的Java核心技术》读书笔记</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/8/E/0/3_kaxier5000.jpg" alt="kaxier5000" title="kaxier5000"></li>
<li class="user_name">kaxier5000</li>
<li class="time">2017年03月14日 21:30</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>797</span></li>
</ul><div class="summary">
1基本的编程结构
1.2.1 整型的的范围不依赖程序所运行的机器。
1.2.1整型的赋值可以给数字添加下划线,例如1_000_000表示一百万,下划线阅读起来更容易,Java编译器会直接删除它们
…
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/undergrowth/article/details/54606424" target="_blank" strategy="BlogCommendFromQuerySearch_16">
<dd>
<h2>2016书单总结--写给大忙人看的JavaSE8-Lambda</h2>
<div class="summary">
2016书单总结–写给大忙人看的JavaSE8-LambdaLambda函数式编程
1. lambda是一段可以传递的代码
2. lambda表示参数,三部分组成
* 参数—->(参数类型…
<ul>
<li class="avatar_img"><img src="https://avatar.csdn.net/A/E/3/3_undergrowth.jpg" alt="undergrowth" title="undergrowth"></li>
<li class="user_name">undergrowth</li>
<li class="time">2017年01月18日 23:19</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>578</span></li>
</ul>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/gyhgx/article/details/70161248" target="_blank" strategy="BlogCommendFromQuerySearch_17">
<dd>
<h2 style="margin-bottom: 0px;">一些底层基本知识(Android篇二)</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/B/E/1/3_gyhgx.jpg" alt="gyhgx" title="gyhgx"></li>
<li class="user_name">gyhgx</li>
<li class="time">2017年04月13日 19:24</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>2358</span></li>
</ul><div class="summary">
这篇着重记录一些Android偏底层的基本知识Activity的工作原理
《Android开发艺术探索》
Android instrumentation原理 http://blog.cs…
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/kiwi_coder/article/details/38734291" target="_blank" strategy="BlogCommendFromQuerySearch_18">
<dd>
<h2 style="margin-bottom: 0px;">《写给大家看的设计书》读书笔记</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/B/C/6/3_kiwi_coder.jpg" alt="kiwi_coder" title="kiwi_coder"></li>
<li class="user_name">kiwi_coder</li>
<li class="time">2014年08月21日 18:36</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>1697</span></li>
</ul><div class="summary">
4大基本原则:对比(Contrast)、重复(Repetition)、对齐(Alignment)、亲密性(Proxi)... </div>
</dd>
</a>
</dl>
<dl class="clearfix csdn-tracking-statistics recommend_article recommend_article_out" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post">
<a href="https://blog.csdn.net/qiyeliuli/article/details/52290025" target="_blank" strategy="BlogCommendFromQuerySearch_19">
<dd>
<h2 style="margin-bottom: 0px;">写给大家看的设计书—robin willianms</h2>
<ul class="floatR">
<li class="avatar_img"><img src="https://avatar.csdn.net/4/6/8/3_qiyeliuli.jpg" alt="qiyeliuli" title="qiyeliuli"></li>
<li class="user_name">qiyeliuli</li>
<li class="time">2016年08月23日 13:14</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>958</span></li>
</ul><div class="summary">
写给大家看的设计书—robin willianms1.优秀的设计
学习四大基本原则
对比
重复
对其
亲密性认识到自己没有运用的这些原则
应用基本原则
2.亲密性
将相关的项组织在一…
</dd>
</a>
</dl>
</div>
</div>
<img class="append_mark_img" style="display:block;position:absolute;left:0;bottom:0;width:30px;height:16px" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAYAAAABOs/SAAAABGdBTUEAALGPC/xhBQAAAhpJREFUOBHFVU2L2lAUHU0nExNHbRq1BkSrSFH8QBdu3QnuxYUr3bj2f/gHRPwrdmVdCLqxIK0KighqWz+mNVPaavtuhgtqnpnposyD5N53z7k57yX33RhKpdK7q2cYxmfQVCUfFU6n06/z+fwbvQWaTCYml8t5gBOJRKzZbFb19XJenIPhcNgaj8dfYZxlWSYWizkZhjFgDGyr1VqMRqMd+JlMRrbZbDd2u/3G4XBwTqeTBx8wGLvd7reiKPuH2cNdI+zz+W4FQbjudrtfkNjr9Vboo91sNr/A9/v9QjKZlFer1X2xWHxLclnIBx+5nU5n0Wg0FjgHqxGG4Hw+V9rt9lfw9YbRaDQUCoVgtVr9MB6P1d2TRYjRaFSq1+uf9HKpwnoJx5jL5eKazebM4/EIcAHmdrvNkiSZUqmU45g7HA6/zWaze4xphDmOY7bb7U8k6FmLxXItiiJ3zNnv938mk8mdLMvqQhBbLpc/dIXNZjM7nU6/Y4Ke7ff7d3AFAoFbUoQnxYd5h8PhCjg4R6vZMQiTQnnSjvEhpAmFB4OBpgABD4VCUrlcfo9ctBphcgx4eC1IeKqt1WofadxKpSLS4ifC5Ltw5Bsd1uu1elRoCZdiiUTiJQ2DyqfFT4SDwaCVnNnPNOJjMdKxqDs7bzz4HMP5T4Lneea8yyD5kvV6vTw5xwoNv4RpevW/ioLYJVE9TCNMW/X/iP0FJ9WyNfNE5tcAAAAASUVORK5CYII="></div>
<div class="writings">
<div class="public_signal clearfix">
<h3>他的最新文章</h3>
<a href="https://blog.csdn.net/qq_24531461" target="_blank" class="more"><span>更多文章</span></a>
</div>
<ul class="inf_list clearfix csdn-tracking-statistics tracking-click" data-mod="popu_382">
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/details/79003967" target="_blank">如何将war反编译为java项目</a>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/details/78812260" target="_blank">Android之获取系统语言和设置APP语言</a>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/details/78794549" target="_blank">zTree初体验(一)获取所有选中节点数据</a>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/details/78787149" target="_blank">谨以此文纪念我伟大的父亲</a>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/details/78728916" target="_blank">简单易懂的jquery版三级联动select</a>
</li>
</ul>
</div>
<div class="user-hotArticle sort ClassSort">
<h3>文章分类</h3>
<ul class="hotArticle-list sort-list ClassSort-list" style="height: 190px; overflow-y: hidden;">
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/category/6429542" class="odd-overhidden floatL">Android</a>
<div class="read list-left floatR"><span>346篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/category/6483030" class="odd-overhidden floatL">Java</a>
<div class="read list-left floatR"><span>77篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/category/6524295" class="odd-overhidden floatL">Android 传感器</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/category/6831751" class="odd-overhidden floatL">数据库</a>
<div class="read list-left floatR"><span>11篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/category/6844671" class="odd-overhidden floatL">算法</a>
<div class="read list-left floatR"><span>2篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/category/6891291" class="odd-overhidden floatL">hibernate</a>
<div class="read list-left floatR"><span>4篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/category/6940419" class="odd-overhidden floatL">写给Android App开发人员看的Android底层知识</a>
<div class="read list-left floatR"><span>8篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/category/6945161" class="odd-overhidden floatL">Spring</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/category/6977906" class="odd-overhidden floatL">AR</a>
<div class="read list-left floatR"><span>2篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/category/7109200" class="odd-overhidden floatL">PHP</a>
<div class="read list-left floatR"><span>2篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/category/7203432" class="odd-overhidden floatL">IOS</a>
<div class="read list-left floatR"><span>10篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/category/7279417" class="odd-overhidden floatL">MUI</a>
<div class="read list-left floatR"><span>11篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/category/7318819" class="odd-overhidden floatL">H5</a>
<div class="read list-left floatR"><span>2篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/category/7329412" class="odd-overhidden floatL">JavaScript</a>
<div class="read list-left floatR"><span>2篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/category/7342084" class="odd-overhidden floatL">纪念</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
</ul>
<div class="unfold-btn">
<span>展开</span><i class="icon iconfont icon-xiajiantou"></i>
</div>
</div>
<!-- [StartShowSelfColumn]-->
<!-- [EndShowSelfColumn]-->
<div class="user-hotArticle sort timeSort">
<h3>文章存档</h3>
<ul class="hotArticle-list timeSort-list" style="height: 190px; overflow-y: hidden;">
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2018/01" class="odd-overhidden floatL">2018年1月</a>
<div class="read list-left floatR"><span>1篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2017/12" class="odd-overhidden floatL">2017年12月</a>
<div class="read list-left floatR"><span>5篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2017/11" class="odd-overhidden floatL">2017年11月</a>
<div class="read list-left floatR"><span>19篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2017/10" class="odd-overhidden floatL">2017年10月</a>
<div class="read list-left floatR"><span>12篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2017/09" class="odd-overhidden floatL">2017年9月</a>
<div class="read list-left floatR"><span>5篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2017/08" class="odd-overhidden floatL">2017年8月</a>
<div class="read list-left floatR"><span>14篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2017/07" class="odd-overhidden floatL">2017年7月</a>
<div class="read list-left floatR"><span>20篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2017/06" class="odd-overhidden floatL">2017年6月</a>
<div class="read list-left floatR"><span>73篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2017/05" class="odd-overhidden floatL">2017年5月</a>
<div class="read list-left floatR"><span>61篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2017/04" class="odd-overhidden floatL">2017年4月</a>
<div class="read list-left floatR"><span>47篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2017/03" class="odd-overhidden floatL">2017年3月</a>
<div class="read list-left floatR"><span>89篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2017/02" class="odd-overhidden floatL">2017年2月</a>
<div class="read list-left floatR"><span>25篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2017/01" class="odd-overhidden floatL">2017年1月</a>
<div class="read list-left floatR"><span>34篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2016/12" class="odd-overhidden floatL">2016年12月</a>
<div class="read list-left floatR"><span>24篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2016/11" class="odd-overhidden floatL">2016年11月</a>
<div class="read list-left floatR"><span>26篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2016/10" class="odd-overhidden floatL">2016年10月</a>
<div class="read list-left floatR"><span>17篇</span></div>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/qq_24531461/article/month/2016/09" class="odd-overhidden floatL">2016年9月</a>
<div class="read list-left floatR"><span>4篇</span></div>
</li>
</ul>
<div class="unfold-btn">
<span>展开</span><i class="icon iconfont icon-xiajiantou"></i>
</div>
</div>
<div class="user-hotArticle">
<h3>他的热门文章</h3>
<ul class="hotArticle-list csdn-tracking-statistics tracking-click" data-mod="popu_521">
github上十二款最著名的Android播放器开源项目
Android学习之Bitmap对象与字节数组相互转换
Android之使用JavaWeb项目作为后台的实现
省市区三级联动菜单(附数据库)
堆是先进先出,栈是先进后出
java web给手机端写接口HttpServletRequest ,HttpServletResponse
Android蓝牙高级操作(多连接)
Atlas-手淘组件化框架(阿里巴巴开源框架)
Android 蓝牙技术 带你实现终端间数据传输
如何在app中打开支付宝进行打赏开发者