这几年,Android开始慢慢流行起来,很多项目也开始涉及这部分内容,所以学习Android也就变的很有意义了。

学什么

学习Android应该学什么,很多人有不同的见解。一般程序员可能只是学习Android的UI控件和Android的API使用等。高级程序员可能会研究一下Android的FrameWork和Android的实现原理。相对于这两者,顶级的程序员会深入的了解Android的层次架构和设计思想并将这些架构和设计思想加以改造、优化之后应用在其他方面。你会怎么做呢?

Android层次架构

既然要学习Android,那么就要从最有魅力架构和设计理念开始。首先咱们先来看一下Android的架构设计图,如下所示:

从上面图中,我们可以看出,这个Android的架构从上到下分为四层,分别是应用程序层、应用程序框架层、系统运行库层以及Linux内核层。

应用程序层

应用程序层主要包括一些应用程序,这一层可以简单的理解为我们能够在移动设备上看到的的各种软件和应用。这些软件和应用都是可以被程序开发人员开发的其他应用程序替换和更新的,这一点相对于早期固化在系统内部的移动端软件更加的灵活和个性化。

应用程序框架层

应用程序框架层主要面对的是Android的应用开发人员,它为Android开发人员开发应用提供了许多可重用的组件,同时,它也允许开发人员替换这些组建。通过这一层,开发人员可以开发丰富的应用,开发人员开发的应用完全可以使用其他应用已开发的功能。

系统运行层

从上图所示,系统运行层可以分为两部分:一部分是Android提供的Lib库,另一部分是Android的运行时。
        所谓Lib库,其实就是对应用程序框架层的支撑,它所实现的所有功能都是通过应用程序框架层对外提供,并将Linux内核和应用程序框架层进行连接。
        Android的运行时类似于Java的运行时机制,可以分为API核心库和一个类似于JVM的虚拟机Dalvk。这部分可以参考JVM进行理解和学习,这里不再赘述。

Linux内核层

Android从本质上来讲,就是在Linux的基础之上进行的一次封装。通过利用Linux Kernel作为硬件和软件之间的抽象层的,并其为上层提供的安全、内存管理、进程管理、网络堆栈、驱动模型等服务的特性,Andorid最终实现了它最基础的核心架构和设计。

通过上面的分析,我们可以清晰的认识到,Android的设计最核心的就是分层。但是如何分层这就是我们要关注的了,所以,学习Android不在于做出一个应用,而是通过学习Android分析它的架构,借鉴、完善、应用并创造价值。

学习最终要的不是学什么,而是想学什么,做人不在于你做什么,而是你想做什么。

一样的Android,不一样的学习的更多相关文章

  1. Android 开源项目及其学习

    Android 系统研究:http://blog.csdn.net/luoshengyang/article/details/8923485 Android 腾讯技术人员博客 http://hukai ...

  2. Android自动化测试之Monkeyrunner学习笔记(一)

    Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...

  3. Android(java)学习笔记267:Android线程池形态

    1. 线程池简介  多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.     假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...

  4. Android(java)学习笔记207:开源项目使用之gif view

    1. 由于android没有自带的gif动画,我在Android(java)学习笔记198:Android下的帧动画(Drawable Animation) 播客中提到可以使用AnimationVie ...

  5. Android(java)学习笔记71:生产者和消费者之等待唤醒机制

    1. 首先我们根据梳理我们之前Android(java)学习笔记70中关于生产者和消费者程序思路: 2. 下面我们就要重点介绍这个等待唤醒机制: (1)第一步:还是先通过代码体现出等待唤醒机制 pac ...

  6. Android(java)学习笔记167:Java中操作文件的类介绍(File + IO流)

    1.File类:对硬盘上的文件和目录进行操作的类.    File类是文件和目录路径名抽象表现形式  构造函数:        1) File(String pathname)       Creat ...

  7. Android(java)学习笔记160:Framework运行环境之 Android进程产生过程

    1.前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程序 ...

  8. Android(java)学习笔记179:BroadcastReceiver之 有序广播和无序广播(BroadcastReceiver优先级)

    之前我们在Android(java)学习笔记178中自定义的广播是无序广播,下面我们要了解一下有序广播:   1.   我们首先了解一下有序广播和无序广播区别和联系? (1) 有序广播> 接受者 ...

  9. Android(java)学习笔记206:利用开源SmartImageView优化网易新闻RSS客户端

    1.我们自己编写的SmartImageView会有很多漏洞,但是我们幸运的可以在网上利用开源项目的,开源项目中有很多成熟的代码,比如SmartImageView都编写的很成熟的 国内我们经常用到htt ...

  10. Android(java)学习笔记205:网易新闻RSS客户端应用编写逻辑过程

    1.我们的项目需求是编写一个新闻RSS浏览器,RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用.RSS目前广泛用于网上新闻频道,bl ...

随机推荐

  1. .NET Reflector反编译的方法

    首先启动.NET Reflector,然后添加进入dll或exe.然后选择Export Source Code...,将反编译后的代码文件,生成到指定目录. 到这一步骤时,稍等一会,就能够在指定目录就 ...

  2. 【MySQL】使用mysqlbinlog回滚

    参考:http://wubx.net/?s=mysqlbinlog mysql官方的mysqlbinlog没有回滚的功能,淘宝大牛对官方代码进行了修改使之能够将binlog中的DML操作变成互逆的语句 ...

  3. 深入理解ASP.NET的内部运行机制(转)

    WebForms和WebServices作为.NET平台构建Web程序的两大利器,以其开发简单.易于部署的特点得到了广泛的应用,但殊不知微软公司在背后为我们做了大量的基础性工作,以至于我们开发人员只需 ...

  4. hdu2571

    if(x==1) f(x,y)=max{f(x,y-1),f(x,z)}  {y%z==0&&1<y/z<=y&&1<=z<<y} els ...

  5. Android窗口跳转

    1.原始界面 package com.fish.helloworld; import android.app.Activity; import android.content.Intent; impo ...

  6. PayPal 开发详解(一):注册PayPal帐号

    1.注册paypal帐号 https://www.paypal.com 2.使用刚才注册的paypal帐号登录3.进入开发者中心 4.登录开发者中心 5.登录 查看我们paypal Sandbox测试 ...

  7. 一个利用sed和awk处理文本的小栗子

    这两天做<Linux操作系统>课程的作业,碰到了一个题目,感觉很有意思,很考验对awk掌握的熟练度,故特意拿来分享. 首先说题目是这样的,有这样一段文本: RECORD #这是多余的注释行 ...

  8. Command

    #include <iostream> using namespace std; #define DESTROY_POINTER(ptr) if (ptr) { delete ptr; p ...

  9. 两分钟让你明白什么是ERP

    把专业的问题通俗化——    ERP(Enterprise Resource Planning)企业资源计划系统,是指建立在信息技术基础上,以系统化的管理思想,为企业决策层及员工提供决策运行手段的管理 ...

  10. Windows2003屏蔽IP

    1.打开本地安全策略   2.创建新的IP策略   去掉勾选向导  我们编辑 直接右键指派   指派可以看出来生效...网络已经不通了