Android基础 《密西西比河谷州立大学:Android应用程序开发》(一)
第一层: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有三种基本状态:
- Active:处于屏幕前景(当前task的栈顶Activity处于Active状态),同一时刻只能有一个Activity处于Active状态;
- Paused状态:处于背景画面画面状态,失去了焦点,但依然是活动状态;
- 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应用程序开发》(一)相关推荐
- 密西西比河谷州立大学:Android应用程序开发(三)
第三讲 用户界面基础 转载于:https://www.cnblogs.com/qiuge227/p/3699794.html
- 密西西比河谷州立大学:Android应用程序开发(一)
第一讲 安卓应用开发介绍 转载于:https://www.cnblogs.com/qiuge227/p/3699779.html
- 密西西比河谷州立大学:Android应用程序开发(五)
用户界面改进 转载于:https://www.cnblogs.com/qiuge227/p/3700146.html
- 密西西比河谷州立大学:Android应用程序开发(四)
第四讲 网络数据获取和显示 转载于:https://www.cnblogs.com/qiuge227/p/3700143.html
- 密西西比河谷州立大学:Android应用程序开发(二)
第二讲 Hello World 转载于:https://www.cnblogs.com/qiuge227/p/3699784.html
- Android基础入门教程——7.4 Android调用WebService
Android基础入门教程--7.4 Android调用WebService 标签(空格分隔): Android基础入门教程 本节引言: 经过前面的学习,数据请求,数据解析,文件上传下载等,应该满足大 ...
- 我要大学答案———小程序开发指南 课后习题答案|实验报告|考研资料|期末真题的答案
我要大学答案-小程序开发原理 大学所有答案都能免费找 设计思路 我要大学答案-小程序 大学所有答案都能免费找 期末考试题库.清华.南昌理工大学.北大.江西理工大学考试题库 期末考试题库.清华.南昌理工 ...
- [Android 泥水匠] Android基础 之一:浅谈Android架构到HelloWorld案例的剖析
作者:泥沙砖瓦浆木匠 网站:http://blog.csdn.net/jeffli1993 个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 36523458 ...
- Android基础之用Eclipse搭建Android开发环境和创建第一个Android项目(Windows平台)...
原地址:http://www.cnblogs.com/allenzheng/archive/2012/11/10/2762379.html 一.搭建Android开发环境 准备工作:下载Eclipse ...
最新文章
- Netty 粘包 拆包 编码 解码 序列化 介绍
- c语言 浮点型数据怎么存放,C语言学习之浮点型数据存储
- UltraEdit的使用方法
- 心电图多少为正常范围_研究:心跳超过70次/分,至少减寿3年!正常心率范围是多少?...
- button 隐藏属性_PyQt5实现仿QQ贴边隐藏功能!有点意思
- 评论:电商巨头们谁有勇气晒晒“价格战”账单?
- 怎样去理解@ComponentScan注解
- 知道经纬度坐标怎么计算两点间距离_【我的时间拣屎】亚里士多德:地球是圆的,我计算了地球的圆周...
- Atitit r2017 r2 doc list on home ntpc.docx
- 解决MFC“由于应用程序配置不正确,应用程序未能启动……”错误提示的问题
- seL4微内核操作系统初期总结 2018.10
- word2019如何删除段落文字带颜色的背景
- WQ7033开发指南(按键篇)之4.3 三轴加速度传感器SC7A20驱动导入按键流程详解
- 数据库查询的降序排列
- 派森诺转录+代谢组联合分析
- 部署JAX-WS Web服务作为战争中的Apache Tomcat(Deploying JAX-WS webservice as War in Apache Tomcat)...
- 基于winform的GIS离线地图
- RememberMe简介
- python学习 论语提取原文
- 同花顺_代码解析_技术指标_D
热门文章
- 电脑开机提示Exiting PXE ROM解决办法
- 爷爷:啥是佩奇?佩奇:Python 10 秒做出来,你看像不像?
- 递推法 c语言,递推法
- 什么是多尺度密集网络 - MSDNet ?
- ijkplayer源码---FFPlayer结构体4 SDL_Aout
- uniapp使用canvas完成手写电子签名
- 经典同步时序逻辑电路分析汇总(第六道)(同步四进制可逆加减法计数器)
- mysql数据库中针对结果保留小数的问题
- c语言输入一批正整数 求其中的偶数和,编程,输入一批整数,先求出其中的偶数和及奇数和,然后输出偶数和与奇数和的差...
- poj 1637 Sightseeing tour 混合欧拉 最大流