这几年,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. css3多列example

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. centos7 docker1.12 私有仓库

    docker1.12私有仓库 参考:http://www.cnblogs.com/xcloudbiz/articles/5497037.html 参考:http://www.07net01.com/2 ...

  3. 571亿背后:DRC助阿里实现异地双活

    571亿背后:DRC助阿里实现异地双活 赶集网SQL自动上线

  4. ajax 方法解密

    1:GET访问 浏览器 认为 是等幂的就是 一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配]所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结果 ...

  5. 修改VS解决方案及工程名,解决如何打开高/版本VS项目

    对于VS2008等低版本与高版本VS之间的转换问题: 对照下面2个版本的不同点自由修改,切换到相应的版本文件(红字修改,灰色删除) ---------------------------------- ...

  6. 【linux】Ubuntu 14.04 smba服务器的配置

    SMB(Server Messages Block,信息服务块)是为了在ubuntu虚拟机与windows之间共享文件. 具体配置过程如下:   (1)安装SMB应用 sudo  apt-get in ...

  7. windows server 时间同步

    域环境,加入域的客户端时间同步服务器时间 问题:服务器存在一种情况,不存在"intelnet时间"选项卡 解决办法:手动修改为正确时间 客户端运行: CMD-->w32tm ...

  8. Android IOS WebRTC 音视频开发总结(六三)-- 2016国内IM云服务行业分析

    本文主要国内IM云服务行业分析,文章最早发表在我们的微信公众号上,详见这里,欢迎关注微信公众号blackerteam,更多详见www.blackerteam.com 谈到IM我们最先想到的是qq和微信 ...

  9. 2014年3月1日 Start && Unique Binary Search Trees

    早上和面试官聊天, 才发现自己的基础下降的有点厉害, 过去那个飘逸写程序的小青年, 如今有点走下坡路了. 可惜我不服,所以要开始做题,把水平恢复上来,能力是最重要的. 最近在做LeetCodeOJ的题 ...

  10. Vue.js学习 Item8 -- 方法与事件处理器

    方法处理器 可以用 v-on 指令监听 DOM 事件: <div id="example"> <button v-on:click="greet&quo ...