写给Android App开发人员看的Android底层知识(7)

时间:2022-04-17 14:52:46
写给Android App开发人员看的Android底层知识(7)

写给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。

 

写给Android App开发人员看的Android底层知识(7)

 

1)定义CP的App1:

       在App1中定义一个CP的子类MyContentProvider,并在Manifest中声明,为此要在MyContentProvider中实现CP的增删改查四个方法:

 

写给Android App开发人员看的Android底层知识(7)

 

写给Android App开发人员看的Android底层知识(7)

 

2)使用CP的App2:

     在App2访问App1中定义的CP,为此,要使用到ContentResolver,它也提供了增删改查4个方法,用于访问App1中定义的CP:

 

写给Android App开发人员看的Android底层知识(7)

 

首先我们看一下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通信,我画个图哦,你们就明白了:

 

写给Android App开发人员看的Android底层知识(7)

 

什么?还没看懂?那我再画一个类的交互关系图:

 

写给Android App开发人员看的Android底层知识(7)

 

这里的CursorWindow就是匿名共享内存。

 

这个流程,简单来说是这样的:

1)Client内部有一个CursorWindow对象,发送请求的时候,把这个CursorWindow类型的对象传过去,这个对象暂时为空。

2)Server收到请求,搜集数据,填充到这个CursorWindow对象。

      3)Client读取内部的这个CursorWindow对象,获取到数据。

 

      由此可见,这个CursorWindow对象,就是匿名共享内存,这是同一块匿名内存。   

举个生活中的例子就是,你定牛奶,在你家门口放个箱子,送牛奶的人每天早上往这个箱子放一袋牛奶,你睡醒了去箱子里取牛奶。这个牛奶箱就是匿名共享内存。

 

 

 

     (4)CP与AMS的通信流程

      接下来我们看一下CP是怎么和AMS通信的。

能坚持看到这里的人,都不容易。我努力多贴图,不贴代码,即使有代码,也是App开发人员能看懂的代码。

还是拿App2想访问App1中定义的CP为例子。我们就看CP的insert方法。

 

写给Android App开发人员看的Android底层知识(7)

 

     上面这5行代码,包括了启动CP和执行CP方法两部分,分水岭在insert方法,insert方法的实现,前半部分仍然是在启动CP,当CP启动后获取到CP的代理对象,后半部分是通过代理对象,调用insert方法。

 

整体的流程如下图所示:

 

写给Android App开发人员看的Android底层知识(7)

 

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。

$(".MathJax").remove();
  • 本文已收录于以下专栏:

写给Android App开发人员看的Android底层知识(1)

这是一组写给App开发人员看的系列文章,先后介绍了Binder、AIDL、四大组件、AMS、PMS等核心思想,以及App安装流程、App启动流程。因为面向的读者是App开发人员,所以尽量不贴底层的代码…
  • 写给Android App开发人员看的Android底层知识(7)
  • JspAndAsp
  • 2017年05月19日 11:56
  • 1414

Android APP开发字体更换

  • 写给Android App开发人员看的Android底层知识(7)
  • 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 App开发人员看的Android底层知识(7)
  • 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&amp;conhei=100&amp;rdid=3394176&amp;dc=3&amp;di=u3394176&amp;dri=1&amp;dis=0&amp;dai=6&amp;ps=2651x393&amp;enu=encoding&amp;dcb=___adblockplus&amp;dtm=HTML_POST&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1522652841751&amp;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&amp;ari=2&amp;dbv=2&amp;drs=3&amp;pcs=1903x949&amp;pss=1903x5179&amp;cfv=0&amp;cpl=4&amp;chi=9&amp;cce=true&amp;cec=UTF-8&amp;tlm=1522652842&amp;prot=2&amp;rw=949&amp;ltu=https%3A%2F%2Fblog.csdn.net%2Fqq_24531461%2Farticle%2Fdetails%2F72820328&amp;ecd=1&amp;uc=1920x1040&amp;pis=-1x-1&amp;sr=1920x1080&amp;tcn=1522652843&amp;qn=c1f2e572eca44348&amp;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底层库和程序



  • 写给Android App开发人员看的Android底层知识(7)
  • 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 &nbsp;&nbsp;

(十)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&amp;conhei=100&amp;rdid=3394176&amp;dc=3&amp;di=u3394176&amp;dri=0&amp;dis=0&amp;dai=5&amp;ps=4362x373&amp;enu=encoding&amp;dcb=___adblockplus&amp;dtm=HTML_POST&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1522652841751&amp;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&amp;ari=2&amp;dbv=2&amp;drs=3&amp;pcs=1903x949&amp;pss=1903x5055&amp;cfv=0&amp;cpl=4&amp;chi=9&amp;cce=true&amp;cec=UTF-8&amp;tlm=1522652842&amp;prot=2&amp;rw=949&amp;ltu=https%3A%2F%2Fblog.csdn.net%2Fqq_24531461%2Farticle%2Fdetails%2F72820328&amp;ecd=1&amp;uc=1920x1040&amp;pis=-1x-1&amp;sr=1920x1080&amp;tcn=1522652842&amp;qn=c0dd5d06c607e7ae&amp;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>


写给Android App开发人员看的Android底层知识(7)
等级:
访问量: 27万+
积分: 4014
排名: 9576
// 判断并设置用户名位置,没有博客专家与关注按钮时,用户名居中 m e d a l s c h i l d r e n = ('.medals').children().length; s p a n a d d f o l l o w = ('#span_add_follow').length; if( medals_children === 0 && span_add_follow === 0){ $('.inf_bar dd').css('vertical-align','10px') }
<iframe scrolling="no" src="//pos.baidu.com/s?hei=250&amp;wid=300&amp;di=u3032528&amp;ltu=https%3A%2F%2Fblog.csdn.net%2Fqq_24531461%2Farticle%2Fdetails%2F72820328&amp;ari=2&amp;tlm=1522652841&amp;cdo=-1&amp;cmi=5&amp;cce=true&amp;dis=0&amp;pcs=1903x949&amp;cfv=0&amp;cpl=4&amp;ps=413x1229&amp;par=1920x1040&amp;pss=1903x8023&amp;prot=2&amp;col=zh-CN&amp;exps=111000&amp;drs=1&amp;ant=0&amp;cec=UTF-8&amp;chi=9&amp;dtm=HTML_POST&amp;dai=2&amp;tpr=1522652841976&amp;dri=0&amp;cja=false&amp;ccd=24&amp;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&amp;psr=1920x1080&amp;dc=3&amp;tcn=1522652842&amp;pis=-1x-1" width="300" height="250"></iframe>
                </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播放器开源项目
    19171


  • Android学习之Bitmap对象与字节数组相互转换
    7180


  • Android之使用JavaWeb项目作为后台的实现
    6217


  • 省市区三级联动菜单(附数据库)
    6088


  • 堆是先进先出,栈是先进后出
    5751


  • java web给手机端写接口HttpServletRequest ,HttpServletResponse
    5692


  • Android蓝牙高级操作(多连接)
    4736


  • Atlas-手淘组件化框架(阿里巴巴开源框架)
    4199


  • Android 蓝牙技术 带你实现终端间数据传输
    3419


  • 如何在app中打开支付宝进行打赏开发者
    3159








  • <iframe scrolling="no" src="https://pos.baidu.com/s?hei=250&amp;wid=300&amp;di=u3163270&amp;ltu=https%3A%2F%2Fblog.csdn.net%2Fqq_24531461%2Farticle%2Fdetails%2F72820328&amp;cfv=0&amp;drs=1&amp;cec=UTF-8&amp;ari=2&amp;cpl=4&amp;cdo=-1&amp;cce=true&amp;ccd=24&amp;prot=2&amp;dtm=HTML_POST&amp;par=1920x1040&amp;pcs=1903x949&amp;dc=3&amp;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&amp;dis=0&amp;ps=2982x1229&amp;cja=false&amp;col=zh-CN&amp;pss=1903x8023&amp;psr=1920x1080&amp;chi=9&amp;tcn=1522652842&amp;tpr=1522652841976&amp;tlm=1522652841&amp;dai=3&amp;ant=0&amp;pis=-1x-1&amp;dri=0&amp;exps=111000&amp;cmi=5" width="300" height="250"></iframe>