|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
多线程问题还有胶水代码的问题建立一个基于CoreData的工程你会看到他自动创建3个类的对象NSManagedObjectModel管理数据的存储结构文件扩展名是xcdatamodeldNSPersistentStoreCoordinator用来管理底层数据的存储用官方的话说CoreDataisnotarelationaldatabaseorarelationaldatabasemanagementsystem(RDBMS)今朝,互联网行业正在野着挪动互联网偏向微弱地开展,而挪动互联网的开展离不开面前的挪动平台的支持。尽人皆知,现在在挪动平台市场上,苹果的iOS、谷歌的Android和微软的WindowsPhone体系已构成了鼎足之势的情势,而Android体系的市场占据率是最高的。Android体系之以是可以在市场上占有着第一的地位,一来是由于它依托着谷歌的人品效应和手艺气力,二来是由于它是开放的,任何人都能够失掉它的源代码,而且可以自在地利用它。既然Android体系是开放的,作为一个挪动平台开辟职员来讲,固然但愿可以深切地往剖析和研讨它的源代码了,但是,Android体系的源代码十分复杂,我们必要循规蹈矩地往进修。
工欲善其事,必先利其器。为了周全、深切地舆解Android体系的源代码,在正式进进Android体系源代码的天下前,我们手头上必要筹办好一些参考材料和实行情况,别的,还必要懂得Android体系的架构常识。
参考材料
Android体系的源代码十分复杂和庞大,我们不克不及冒然进进,不然很简单在内里迷进偏向,进而得到研讨它的信念。我们应当在剖析它的源代码之前进修好一些实际常识,上面就先容一些与Android体系相干的材料。
我们晓得,Android体系是基于Linux内核来开辟的,在剖析它在运转时库层的源代码时,我们会常常碰着诸如管道(pipe)、套接字(socket)和假造文件体系(VFS)等常识。别的,Android体系还在Linux内核中增添了一些公用的驱动程序,比方用于日记体系的Logger驱动程序、用于历程间通讯的Binder驱动程序和用于帮助内存办理的匿名共享内存Ashmem驱动程序。在剖析这些Android公用驱动程序的时分,也会碰着Linux内核中与历程、内存办理相干的数据布局。因而,我们有需要把握一些Linux内核的基本常识,上面就先容四本典经的Linux内核书本。
- LinuxKernelDevelopment.这本书的作者是RobertLove,今朝最新的版本是第3版。这本书对Linux内核的计划和完成供应了一个总览视图,从观点上对Linux内核的各个子体系的计划方针和完成思绪举行了明晰的形貌,十分合适初学者浏览。假如从软件工程的角度来看,这本书就相称因而Linux内核的提要计划文档。
- UnderstandingtheLinuxKernel.这本书的作者是DanielP.Bovet和MarcoCesati,今朝最新的版本是第3版。这本书对Linux内核的完成供应了更多的细节,具体地形貌了内核开辟顶用到的主要数据布局、算法和编程技能,十分合适中初级读者浏览。假如从软件工程的角度来看,这本书就相称因而Linux内核的具体计划文档。
- LinuxDeviceDrivers.这本书的作者是JonathanCorbet,AlessandroRubini和GregKroah-Hartman,今朝最新的版本是第3版。这本书加倍注意实践操纵,它具体地解说了Linux内核驱动程序的完成道理和完成办法,读者能够随着它来实践地编写出本人的Linux驱动程序。浏览了这本书以后,对我们后续往剖析Android的公用驱动程序是有十分年夜的匡助的。
- Linux内核源代码情形剖析这本书的作者是毛德操和胡希明,是中国人本人编写的一本典范的Linux内核书本。这本书最年夜的特性是从利用情形动身,对Linux内核的源代码作了具体的剖析,匡助读者把单调有趣的源代码给理顺了。
把握了Linux内核的基本常识以后,还不宜即刻就往剖析Android体系的源代码,由于如许做是漫无目标的,我们应当带着成绩大概方针往剖析Android体系的源代码。要把成绩大概方针发掘出来,最好的办法就莫过因而在Android平台上编写本人的使用程序了。经由过程编写使用程序,我们能够晓得Android平台都供应了哪些功效,进而我们就会想往懂得这些功效是怎样完成的,如许就能够到达带着成绩大概方针往剖析Android体系的源代码了。这里先容两个Android使用程序开辟教程的书本:
- ProfessionalAndroid2ApplicationDevelopment.
- GoogleAndroidSDK开辟典范年夜全.
这两本书都利用了大批的例子来讲明怎样利用AndroidSDK来开辟Android使用程序。读者能够依据实践情形来实习一下,次要把握Android使用程序四年夜组件(Activity、Service、BroadcastReceiver和ContentProvider)的用法,由于Android体系的全部架构和完成就是为了向开辟者供应这四年夜组件来完成林林总总的使用程序的。在进修的过程当中,假如碰到别的成绩,还能够参考官方文档,其网址为:http://developer.android.com/index.html
情况搭建
开辟Android使用程序能够在两种情况下举行,一是在AndroidSDK情况下举行,通常为集成在Eclipse内里举行开辟,二是在Android源代码工程情况下举行,在这类情况举行开辟的优点是可使用一些在SDK中不公然的接口。可是假如我们要修正Android体系的源代码,大概为Android体系增添新的功效接口,那末就只能在Android源代码工程情况下举行了。因为我们的目标是对Android体系源代码举行剖析,因而,我们在开辟Android使用程序时,也在Android源代码情况下举行。如许,我们就必要搭建一套Android源代码工程情况了。
今朝,Android源代码工程情况只能在Linux平台上利用,而Linux体系的刊行版本对照多,这里我们保举Ubuntu体系。Ubuntu体系是收费的,并且十分易于利用,安装和更新使用程序也十分便利,它的官方下载地点为:http://www.ubuntu.com/
安装好Ubuntu体系以后,我们就能够在下面下载、编译和安装Android源代码了,详细办法和步骤能够参考上面这篇文章:在Ubuntu高低载、编译和安装Android最新源代码
Android体系的源代码工程默许是不包括Linux内核源代码的,假如我们必要修正Android体系的内核大概在内里增添新的模块,那末就要把Android内核源代码一同下载、编译和安装了,详细办法和步骤能够参考上面这篇文章:在Ubuntu高低载、编译和安装Android最新内核源代码(LinuxKernel)
Android源代码工程情况搭建好了以后,我们就能够在内里开辟新的使用程序大概修正体系代码了。增添了新的使用程序大概修正了体系的代码以后,不必要从头编译全部源代码工程,只需独自编译有修改的模块就能够了,详细办法能够参考上面这篇文章:怎样独自编译Android源代码中的模块
关于已开辟好的使用程序大概体系功效,假如想把看成Demo展现给客户来体验时,我们既能够在真机下面运转,也能够在摹拟器(Android源代码工程情况大概AndroidSDK情况都集成了摹拟器)下面运转。当我们手头上没有真机,并且我们又不想把全部Android源代码工程情况大概AndroidSDK情况带往展现我们的Demo时,就能够思索把摹拟器这两个情况中自力出来了,详细办法能够参考上面这篇文章:制造可自力分发的Android摹拟器
体系架构
Android体系是按条理、分模块来计划的。在我们动手对Android体系的源代码举行剖析前,必要对Android体系的架构有一个整体的熟悉,如许我们就可以够疾速地晓得哪些代码位于哪一个条理上的哪一个模块中,节俭搜刮代码的工夫,把更多的精神投进在源代码的剖析上往。
<br>
全部体系分别内核空间和用户空间两部分。内核空间包括了历程办理、内存办理和设备驱动程序模块等,个中Android公用驱动Binder、Logger和Ashmem就是在内核空间完成的。用户空间包括了硬件笼统层(HAL)、内部库和运转时库层(ExternalLibraries&AndroidRuntime)、使用程序框架层(ApplicationFramework)和使用程序层(Applications)四个条理。我们应当怎样往把握这个条理布局呢?最好的办法就是从进修Android的硬件笼统层作为切进点了。
大概读者会以为对照奇异,为何要把Android体系的硬件笼统层作为进修Android体系架构的切进点呢?这个条理由于触及到硬件,看起来这是一个对照庞大和深邃的常识点。实在否则,Android体系的硬件笼统层在完成和利用上,条理都长短常明晰的,它从上到下涵盖了Android体系的用户空间和内核空间。内核空间次要就是触及到硬件驱动程序,而用户空间就触及到了Android体系使用程序层、使用程序框架层和体系运转时库层的相干常识。因而,进修Android体系的硬件笼统层,可使读者疾速地熟悉全部Android体系,从而对Android体系失掉一个理性的熟悉,为前面深切剖析Android体系的源代码打下优秀的基本。
Android硬件笼统层的进修能够参考上面的一系列文章:
- Android硬件笼统层(HAL)提要先容和进修企图
- 在Ubuntu上为Android体系编写Linux内核驱动程序
- 在Ubuntu上为Android体系内置C可实行程序测试Linux内核驱动程序
- 在Ubuntu上为Android增添硬件笼统层(HAL)模块会见Linux内核驱动程序
- 在Ubuntu为Android硬件笼统层(HAL)模块编写JNI办法供应Java会见硬件服务接口
- 在Ubuntu上为Android体系的ApplicationFrameworks层增添硬件会见服务
- 在Ubuntu上为Android体系内置Java使用程序测试ApplicationFrameworks层的硬件服务
学会了编写基础的Android使用程序而且对Android体系的全体架构有一个也许的懂得以后,我们就能够往剖析Android体系的源代码了。
在剖析Android源代码的过程当中,我们常常进进到使用程序框架层往剖析它的源代码,而在使用程序框架层中,有一部分代码是利用C++来完成的,这时候候就会常常碰着智能指针,因而,我们把Android体系中的智能指针也作为一个基本常识点来进修。信任利用过C++言语来做开辟的读者对智能指针不会感应生疏。用C++来写代码最简单堕落的中央就是指针了,一旦利用不妥,轻则形成内存泄露,重则形成体系溃散,因而,体系为我们供应了智能指针,制止呈现上述成绩。
在Android体系中,供应了三品种型的智能指针,分离是轻量级指针、强指针和弱指针,它们都是基于对象援用计数手艺来完成的。轻量级指针的计数手艺对照复杂,只需对象的援用计数值为0,它就会被开释。强指针和弱指针的计数手艺绝对对照庞大,一个对象能够同时被强指针和弱指针援用,可是这个对象的性命周期一样平常只受强指针的把持,即当这个对象的强援用计数为0的时分,这个对象就被开释了,即便这时候候这个对象的弱援用计数不为0。引进强指针和弱指针这类庞大的援用计数手艺是为懂得决渣滓搜集(GarbageCollection)成绩而提出的。思索如许的一个场景,体系中有两个对象A和B,在对象A的外部援用了对象B,而在对象B的外部也援用了对象A。当两个对象A和B都不再利用时,渣滓搜集体系会发明没法接纳这两个对象的所占有的内存的,由于体系一次只能搜集一个对象,而不管体系决意要发出对象A仍是要发出对象B时,城市发明这个对象被别的的对象所援用,因此就都接纳不了,如许就形成了内存泄露。假如接纳强指针和弱指针手艺,这个成绩就水到渠成了,即A和B都用弱指针来援用对方。Android智能指针的进修,能够参考上面这篇文章:Android体系的智能指针(轻量级指针、强指针和弱指针)的完成道理剖析
把握了本文所先容的这些基本常识后,我们就能够正式入手下手剖析Android体系的源代码了。
关于作者
罗升阳,前后就读于浙江年夜学(学士)、上海交通年夜学(硕士)盘算机专业。如今供职于国际一家互联网公司,处置软件开辟事情,专注于挪动平台开辟。
NSStringNSArrayNSDictionary等这些工具在所有的框架里都会出现iOS大部分类都是继承自NSObject(我还没见过不是继承自NSObject的..) |
|