Android架构

图1

Android架构自上而下名称为应用层、应用框架层、运行库和Adroid虚拟机层、 Linux内核层。

1. 应用层

应用层像一座大厦里面的砖瓦。我们所做的开发基本上都在应用层,在手机上应用层的软件有桌面、短信、电话、浏览器、微信、扣扣等等这类软件。应用层的软件是在应用框架层的规定和支持下开发。两个意思 :a. 应用层会调用框架层提供的API进行开发,b.框架层会对应用层的软件进行规范和管理,应用层的软件是面向框架层开发的。 该层采用java开发。

2. 应用框架层

应用框架层像一座大厦的钢筋结构。应用框架层提供了Android开发模式和所有安卓开发所需要的各个组件、API,并提供了管理功能。其中很多的组件API通过JNI调用了下一层的功能来实现。该层使用Java代码实现。框架层也允许应用在安全的情况下向其他程序发布service、Activity和数据。

  • Activity Manager:  管理应用程序生命周期,提供通用的导航回退功能
  • Window Manager:  主要用来管理窗口的一些状态、属性、view增加、删除、更新、窗口顺序、消息收集和处理等。
  • Content Providers: 提供不同进程数据访问和共享功能。
  • Resource Manager: 提供访问非代码资源,如本地化字符串、图形和布局文件
  • Notification Manager:使所有的应用程序能够在状态栏显示自定义提示信息

3. 函数库和Android运行时层

Android运行时是一座大厦的地基,函数库像根。函数库全部采用C/C++语言实现,为框架层提供功能API。框架层可以采用JNI的方式调用。函数库需要调用Linux内核。

其重要的函数库有:

  • Libc:专门为嵌入式设备调整的标准C系统库。
  • SGL/openGL|ES:图形引擎
  • WebKit:浏览器引擎
  • SQLite:轻量级关系数据库
  • Media Framework:多媒体播放、录制框架。
  • SurfaceManager:管理对显示子系统的访问。
  • Freetype:位图和向量字体显示。

Android运行时包含一个核心库和虚拟机程序,虚拟机程序是解释执行android java字节码的程序。虚拟机程序有两种,Dalvik和ART,Dalvik虚拟机提供了JIT技术(Just-in-time Compiler)在运行时编译经常运行的字节码来提升应用的运行速度。在4.4以后提供了ART模式虚拟机,ART技术就是在安装应用的时候会进行一次预编译,将字节码转换为机器语言存储在本地,这样在运行程序时就不会每次都进行一次编译了,执行效率也大大提升,不过这也导致应用安装时间变长。而每次启动安卓系统的时候,系统都会进行所有应用的安装,所以启动速度变慢。每一个安卓应用程序都运行在一个虚拟机进程中。它把所有的进程和内存管理都交给了运行时,在有必要的时候,运行时会结束或者暂停进程,从而更有效的管理资源。

Android运行时和函数库在linux内核之上,由内核来处理与底层硬件的交互。同时有一套API提供对所有底层服务、硬件和功能的访问。

4. Linux内核层

Linux内核层像地球。该层就是一个linux内核+驱动。负责了内存管理、进程管理、协议栈和驱动模型等核心系统服务。

Android Application

1. 应用程序优先级等于其优先级最高的组件的优先级。

2. 应用程序不等于进程。一个安卓应用,可以拥有多个进程.remote,process。

优先级

活动进程

拥有与用户交互的组件

以下几种情况属于活动进程

A. 处于onCreate、onStart、onDestroy的service

B. 正在运行、标记为前台运行的service

C. 处于onReceive的BroadcastReceiver

D. 活跃状态的Activity

可见进程

用户可以看到,但是不能交互,就像Activity上有个弹窗。

服务进程

开启了service的进程

后台进程

不可见、没有service的activity的进程。

空进程

只是为了缓存。

3. 如果应用程序A依赖于应用程序B的service或者provider,那么优先级肯定B>A

4. 能对应用程序级的广播作出响应(低内存)。

5. 因为是应用程序级的单例模式对象,各种组件都能够取得这个对象,所以可以用来传递数据、维护和管理数据,做一切想做的。

Application类事件回调

事件处理函数

onCreate

创建时触发

onLowMemory

低内存事件触发,无参数

onTrimMemory(int)

Android 4.0之后提供的API,系统会根据不同的内存状态来回调。会带有int参数,表示现在的状态

onConfigurationChanged(Configuration )

配置改变处理

6. 在运行时配置(例如语言、插入SIM卡、时区变换、旋转屏幕等)改变时,不会像Activity那样重启。

转载请注明出处:http://www.cnblogs.com/stonehat/
 
 

【原创】菜鸟版Android 笔记1- Android架构和Application的更多相关文章

  1. Android 笔记之 Android 系统架构

    Android笔记之Android系统架构 h2{ color: #4abcde; } a{ color: blue; text-decoration: none; } a:hover{ color: ...

  2. Android笔记: Android版本号

    由于有2套版本号 总是对应不准 记下来做过标记 Android 4.3 ----18 Android 4.2---17 Android 4.1---16 Android 4.0.3---15Andro ...

  3. Android笔记:android的适配

    public int Dp2Px(Context context, float dp) { final float scale = context.getResources().getDisplayM ...

  4. Android菜鸟的成长笔记(1)——Android开发环境搭建从入门到精通

    原文:Android菜鸟的成长笔记(1)--Android开发环境搭建从入门到精通 今天在博客中看到好多Android的初学者对Android的开发环境的搭建不熟悉而导致不能进行学习,所以我决定自己写 ...

  5. Android菜鸟的成长笔记(4)——你真的理解了吗?

    原文:Android菜鸟的成长笔记(4)--你真的理解了吗? 在上一篇中我们查看了QQ的apk源文件中的布局结构,并仿照QQ完成了我们第一个应用的界面,详细请看<Android菜鸟的成长笔记&g ...

  6. Android菜鸟的成长笔记(3)——给QQ登录界面说So Easy

    原文:Android菜鸟的成长笔记(3)--给QQ登录界面说So Easy 上一篇:Android菜鸟的成长笔记(2)--第一个Android应用 我们前面已经做了第一个Android应用程序,虽然有 ...

  7. Android菜鸟的成长笔记(2)——第一个Android应用

    原文:Android菜鸟的成长笔记(2)--第一个Android应用 上一篇:Android菜鸟的成长笔记(1)--Anddroid环境搭建从入门到精通 在上一篇Android菜鸟的成长笔记(1)中我 ...

  8. Android菜鸟的成长笔记(14)—— Android中的状态保存探究(上)

    原文:[置顶] Android菜鸟的成长笔记(14)—— Android中的状态保存探究(上) 我们在用手机的时候可能会发现,即使应用被放到后台再返回到前台数据依然保留(比如说我们正在玩游戏,突然电话 ...

  9. Android菜鸟的成长笔记(13)——异步任务(Async Task)

    原文:[置顶] Android菜鸟的成长笔记(13)——异步任务(Async Task) Android的UI线程主要负责处理用户的事件及图形显示,因此主线程UI不能阻塞,否则会弹出一个ANR(App ...

  10. Android菜鸟的成长笔记(12)——Handler、Loop、MessageQueue

    原文:[置顶] Android菜鸟的成长笔记(12)——Handler.Loop.MessageQueue 当一个程序第一次启动时,Android会启动一条主线程(Main Thread),主线程主要 ...

随机推荐

  1. Douglas Peucker算法的C#实现

    一.算法原理 Douglas-Peucker算法 在数字化过程中,需要对曲线进行采样简化,即在曲线上取有限个点,将其变为折线,并且能够在一定程度 上保持原有的形状. 经典的Douglas-Peucke ...

  2. zk client获取数据

    获取数据 它返回znode的关联数据和指定znode的元数据.你将获得信息,例如上次修改数据的时间,修改的位置以及数据的相关信息.此CLI还用于分配监视器以显示数据相关的通知. 语法 get /pat ...

  3. Asp.Net生命周期和Http管道技术

    本篇主要介绍一下内容: 1.ASP.NET生命周期 2.Http运行时 3.Http管道技术 a)inetinfo.exe b)asp.net_isapi.dll c)aspnet_wp.exe d) ...

  4. springMVC中Restful支持

    RESTFul支持 http://localhost:8090/user/doAdd.action?username=tony&age=8 http://localhost:8090/user ...

  5. k8s debug记录之kubelet user.slice container monitor failure

    在kubernetes中,如果使用其自带的单机启动脚本./hack/local-up-cluster.sh来启动一个本地集群的话,会在kubelet的日志中观察到类似以下内容的日志: Failed t ...

  6. 最小生成树之Prim(普里姆)算法

    关于什么是Prim(普里姆算法)? 在实际生活中,我们常常碰到类似这种一类问题:如果要在n个城市之间建立通信联络网, 则连通n个城市仅仅须要n-1条线路.这时.我们须要考虑这样一个问题.怎样在最节省经 ...

  7. 爪哇国新游记之二十二----排序判断重复时间复杂度为2n的位图法

    import java.util.ArrayList; import java.util.List; /** * 位图法 * 用于整型数组判重复,得到无重复列表 * */ public class B ...

  8. 基于.NET的轻量级微信SDK

    一.前言 特别不喜欢麻烦的一个人,最近碰到了微信开发.下载下来了一些其他人写的微信开发“框架”,但是被恶心到了,实现的太臃肿啦. 最不喜欢的就是把微信返回的xml消息在组装成实体类,所以会比较臃肿,现 ...

  9. Centos系统信息及日志

    1.确认内核版本: #uname -r #uname -a 2.确认发行版本: #cat /etc/redhat-release 3.查看系统载入的模块: #lsmod | grep XXX 载入一个 ...

  10. S6:组合模式 Composite

    将对象组合成树形结构以表示整体-部分的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性. UML: 示例代码:透明组合:叶节点和子节点具有相同的接口 abstract class Com ...