第一层:Linux操作系统和驱动(Linux kernel):由C语言实现。

Android核心系统服务依赖于Linux2.6内核,包括:安全性、内存管理、进程管理、网络协议、驱动模型。Linux内核也作为硬件和软件栈之间的抽象层。

除了标准的Linux内核外,Android还增加了内核的驱动程序:Binder(IPC)驱动、显示驱动、输入设备驱动、音频系统驱动、摄像头驱动、WiFi驱动、蓝牙驱动、电源管理。

第二层:本地框架和Java运行环境(LIBRARIES 和 ANDROID RUNTIME)

本地框架是有C/C++实现。包含C/C++库,被Android系统中不同组件使用,它们通过Android应用程序框架为开发者进行服务。

系统C库:(libc)从BSD继承过来的标准的C系统函数库,专门是为基于嵌入式Linux的设备定制的库。

多媒体库:基于PackerVideo的OpenCore;该库支持多种常用的音频、视频格式回放和录制,支持多种媒体格式的编和解码格式。

Suface Manager:显示子系统管理器,并且为多个应用程序提供2D和3D图层的无缝融合。

LibWebCore:一个最新的Web浏览器引擎,支持Android浏览器,以及一个可嵌入式的Web视图。

SGL:Skia图形库,底层的2D图形引擎。

3D libraries:基于OpenGL ES1.0 API的实现;该库可以使用硬件3D加速(如果可用),或者使用高度优化的3D软加速。

FreeType:位图(bitmap)和矢量(vector)字体显示。

Android运行环境(ANDROID RUNTIME):提供了Java编程语言核心库的大多数功能,由Dalvik Java虚拟机和基础的Java类库组成

Dalvik是Android中使用的Java虚拟机,每个Android应用程序都在自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。

Dalvik被设计成一个可以同时高效运行多个虚拟机实例的虚拟系统。执行后缀名为.dex的Dalvik可执行文件,该格式的文件

针对小内存使用做出了优化。同时虚拟机是基于寄存器的,所有的类都是有Java编译器编译,然后通过SDK中的“dx”工具

转化为.dex格式由虚拟机执行。

Dalvik虚拟机依赖于Linux内核的一些功能,比如线程机制和底层内存管理机制。

第三层:Android应用框架(ANDROIDFRAMEWORK)

在Android系统中,开发人员也可以完全访问核心应用程序所使用的API框架。

第四层:Android应用程序(APPLICATIONS)

注意:Android应用程序都是有Java语言编写的。用户开发的Android应用程序和Android的核心应用程序是同一层次的,它们都是基于Android的系统API构建的。

每一个Android中应用的都是以linux中的进程形式运行,都有唯一的ID号。系统会管理所有的活动栈,生成堆栈。

4大组件详解:

1.Activity活动

呈现用户界面,从Activity基类中继承,一个操作就是一个activity(如列出一个电话表让用户选择上面的人)

2.Service服务

没有用户界面,响应Activity的选择,从Service基类中继承扩展,长时间后台运行,即使Activetiy退出了还能运行。(如音乐播放器在后台播放,就需要用到Service)

3.Broadcast Recevier

接受和响应广播,从BroadcastRecevier基类中继承扩展,应用也可以发出广播。(如下载完后通知其他应用,轮到它们使用网络了,广播过滤器的概念就是帮助应用APP过滤一些无用的广播,在Intent中用到)

4.Content Provider

管理应用数据,将应用的特定数据提供给其他应用。从ContentProvider基类中继承扩展。数据可以放在文件系统,或者数据库,任何地方。(如Android默认有一个Content Provider管理联系人数据库,给其他应用提供数据支持)

生命周期

Android应用程序不能控制它们自己的进程的生存期;而Android运行时可以管理每一个应用程序的进程,也就是说,它也可以管理进程内的每个活动。

一个 Android 程序的进程是何时被系统结束的呢?通俗地说,一个即将被系统关闭的程序是系统在内存不足(low memory)时,根据“重要性层次”选出来的“牺牲品”。一个进程的重要性是根据其中运行的部件和部件的状态决定的。各种进程按照重要性从高到低排列如 下:
  1. 前台进程。这样的进程拥有一个在屏幕上显示并和用户交互的 activity 或者它的一个IntentReciver 正在运行。这样的程序重要性最高,只有在系统内存非常低,万不得已时才会被结束。
  2. 可见进程。在屏幕上显示,但是不在前台的程序。比如一个前台进程以对话框的形式显示在该进程前面。这样的进程也很重要,它们只有在系统没有足够内存运行所有前台进程时,才会被结束。
  3. 服务进程。这样的进程在后台持续运行,比如后台音乐播放、后台数据上传下载等。这样的进程对用户来说一般很有用,所以只有当系统没有足够内存来维持所有的前台和可见进程时,才会被结束。
  4. 后台进程。这样的程序拥有一个用户不可见的 activity。这样的程序在系统内存不足时,按照 LRU 的顺序被结束。
  5. 空进程。这样的进程不包含任何活动的程序部件。系统可能随时关闭这类进程。

Activity有三种基本状态:

  1. Active:处于屏幕前景(当前task的栈顶Activity处于Active状态),同一时刻只能有一个Activity处于Active状态;
  2. Paused状态:处于背景画面画面状态,失去了焦点,但依然是活动状态;
  3. stopped:不可见,但依然保持所有的状态和内存信息。
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()

这些都是钩子函数,你可以重写他们。所有的activity在首次运行时必须实现onCreate()方法来初始化安装。activity可以实现onPause()来提交数据改变,然后准备停止与用户的交互。

1、onCreate()     
Acitivity首次创建时被调用。用于设置Acitivity的布局文件,绑定按钮监听器等一些普通静态操作。

2、onStart() 
Acitivity对用户可见时被调用。

3、onResume() 
Acitivity获得用户焦点,即用户可操作该Acitivity时被调用。

4、onPause() 
应用程序启动了其它Acitivity时被调用。一般用于保存当前Acitivity中的数据。

5、onStop() 
Acitivity不可见时被调用。

6、onRestart() 
已停止的Acitivity重新启动时被调用。

7、onDestroy() 
调用Acitivity的finish()方法或Android系统资源不足时被调用。

Activity starts -->onCreate()-->onStart()-->onResume()-->activity is running--another activity comes in front of this activity-->onPause()--the activity is no longer visivble-->onStop()-->onDestroy()-->activity is shut down

意图Intent:

android.content.Intent实例化。描述要执行的操作(如发送邮件),或广播(如摄像头已经被激活),从一个Activity转到另一个Activity的方法。通过向另一个Activity传送两段数据,动作Action和该处理动作所需数据的URL。

通常用的是隐式Intent,显式一般只在应用内部传递消息。

Intent filter过滤器让组件能接收到其所公告的类型的隐式Intent。如果组件没有过滤器则只接受显式Intent。

隐性意图:只表示要干的事,不指明Activity对象。如果存在多个适合的Activity则系统会出现列表让用户选择(如打开网页,出现选择浏览器的提示框)。

显性意图:让另一个Activity干某件事,指明Activity的名称。











Android基础 《密西西比河谷州立大学:Android应用程序开发》(一)相关推荐

  1. 密西西比河谷州立大学:Android应用程序开发(三)

    第三讲 用户界面基础 转载于:https://www.cnblogs.com/qiuge227/p/3699794.html

  2. 密西西比河谷州立大学:Android应用程序开发(一)

    第一讲 安卓应用开发介绍 转载于:https://www.cnblogs.com/qiuge227/p/3699779.html

  3. 密西西比河谷州立大学:Android应用程序开发(五)

    用户界面改进 转载于:https://www.cnblogs.com/qiuge227/p/3700146.html

  4. 密西西比河谷州立大学:Android应用程序开发(四)

    第四讲 网络数据获取和显示 转载于:https://www.cnblogs.com/qiuge227/p/3700143.html

  5. 密西西比河谷州立大学:Android应用程序开发(二)

    第二讲 Hello World 转载于:https://www.cnblogs.com/qiuge227/p/3699784.html

  6. Android基础入门教程——7.4 Android调用WebService

    Android基础入门教程--7.4 Android调用WebService 标签(空格分隔): Android基础入门教程 本节引言: 经过前面的学习,数据请求,数据解析,文件上传下载等,应该满足大 ...

  7. 我要大学答案———小程序开发指南 课后习题答案|实验报告|考研资料|期末真题的答案

    我要大学答案-小程序开发原理 大学所有答案都能免费找 设计思路 我要大学答案-小程序 大学所有答案都能免费找 期末考试题库.清华.南昌理工大学.北大.江西理工大学考试题库 期末考试题库.清华.南昌理工 ...

  8. [Android 泥水匠] Android基础 之一:浅谈Android架构到HelloWorld案例的剖析

    作者:泥沙砖瓦浆木匠 网站:http://blog.csdn.net/jeffli1993 个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 36523458 ...

  9. Android基础之用Eclipse搭建Android开发环境和创建第一个Android项目(Windows平台)...

    原地址:http://www.cnblogs.com/allenzheng/archive/2012/11/10/2762379.html 一.搭建Android开发环境 准备工作:下载Eclipse ...

最新文章

  1. Netty 粘包 拆包 编码 解码 序列化 介绍
  2. c语言 浮点型数据怎么存放,C语言学习之浮点型数据存储
  3. UltraEdit的使用方法
  4. 心电图多少为正常范围_研究:心跳超过70次/分,至少减寿3年!正常心率范围是多少?...
  5. button 隐藏属性_PyQt5实现仿QQ贴边隐藏功能!有点意思
  6. 评论:电商巨头们谁有勇气晒晒“价格战”账单?
  7. 怎样去理解@ComponentScan注解
  8. 知道经纬度坐标怎么计算两点间距离_【我的时间拣屎】亚里士多德:地球是圆的,我计算了地球的圆周...
  9. Atitit r2017 r2 doc list on home ntpc.docx
  10. 解决MFC“由于应用程序配置不正确,应用程序未能启动……”错误提示的问题
  11. seL4微内核操作系统初期总结 2018.10
  12. word2019如何删除段落文字带颜色的背景
  13. WQ7033开发指南(按键篇)之4.3 三轴加速度传感器SC7A20驱动导入按键流程详解
  14. 数据库查询的降序排列
  15. 派森诺转录+代谢组联合分析
  16. 部署JAX-WS Web服务作为战争中的Apache Tomcat(Deploying JAX-WS webservice as War in Apache Tomcat)...
  17. 基于winform的GIS离线地图
  18. RememberMe简介
  19. python学习 论语提取原文
  20. 同花顺_代码解析_技术指标_D

热门文章

  1. 电脑开机提示Exiting PXE ROM解决办法
  2. 爷爷:啥是佩奇?佩奇:Python 10 秒做出来,你看像不像?
  3. 递推法 c语言,递推法
  4. 什么是多尺度密集网络 - MSDNet ?
  5. ijkplayer源码---FFPlayer结构体4 SDL_Aout
  6. uniapp使用canvas完成手写电子签名
  7. 经典同步时序逻辑电路分析汇总(第六道)(同步四进制可逆加减法计数器)
  8. mysql数据库中针对结果保留小数的问题
  9. c语言输入一批正整数 求其中的偶数和,编程,输入一批整数,先求出其中的偶数和及奇数和,然后输出偶数和与奇数和的差...
  10. poj 1637 Sightseeing tour 混合欧拉 最大流