如果您想了解Android操作系统简介和1的知识,那么本篇文章将是您的不二之选。我们将深入剖析Android操作系统简介的各个方面,并为您解答1的疑在这篇文章中,我们将为您介绍Android操作系统简
如果您想了解Android操作系统简介和1的知识,那么本篇文章将是您的不二之选。我们将深入剖析Android操作系统简介的各个方面,并为您解答1的疑在这篇文章中,我们将为您介绍Android操作系统简介的相关知识,同时也会详细的解释1的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- Android操作系统简介(1)(android操作系统简介)
- 3.操作系统简单介绍 操作系统发展历史 批处理分时系统 操作系统是什么 操作系统对文件的抽象 进程 虚拟内存是什么 操作系统作用 操作系统功能
- Android MK 简介(一)
- Android Sensor详解(1)简介与架构【转】
- Android Service简介(系列1)
Android操作系统简介(1)(android操作系统简介)
系统简介
Android
一词的本义指 “机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。
Android一词最早出现于法国作家利尔亚当(Auguste Villiers de l’Isle-Adam)在1886年发表的科幻小说《未来夏娃》(L’ève future)中。
发展历程
- 2003年10月,Andy Rubin 等人创建Android公司,并组建Android团队。
- 2005年8月17日,Google低调收购了成立仅22个月的高科技企业Android及其团队。安迪 鲁宾成为Google公司工程部副总裁,继续负责Android项目。
- 2008年,在GoogleI/O大会上,谷歌提出了AndroidHAL架构图,在同年8月18号,Android
获得了美国联邦通信委员会(FCC)的批准,在2008年9月,谷歌正式发布了Android 1.0系
统,这也是Android系统最早的版本。 - 2009年9月,谷歌发布Android 1.6的正式版,并且推出了搭载Android1.6正式版的手机 HTC Hero(G3),凭借着出色的外观设计以及全新的Android 1.6操作系统,HTC Hero(G3)成为当时全球最受欢迎的手机。Android 1.6也有一个有趣的甜品名称,它被称 为Donut(甜甜圈)。
- 2019年,Android 10。
发行版本
1.1
2008年9月发布的Android第一版
1.5
Cupcake(纸杯蛋糕):2009年4月30日发布
1.6
Donut(甜甜圈):2009年9月15日发布
2.0
2009年10月26日发布。
3.0
Honeycomb(蜂巢):2011年2月2日发布。
4.0
Ice Cream Sandwich(冰激凌三明治):2011年10月19日在香港发布。
5.0
Android 5.0Lollipop(棒棒糖):美国太平洋时间2014年10月15日
6.0
Android 6.0Marshmallow(棉花糖):2015年9月30日
7.0
Android 7.0Nougat(牛轧糖):2016年8月22日
8.0
Android 8.0Oreo(奥利奥):2017 年 8 月 22 日
9.0
Android 9.0Pie (派):2018 年 5月 9日
10.0
Android 10.0 2019年 , 今年的Android Q的正式名称是Android 10
11
按照惯例,Android 11可能会在2020年3月份放出(开发版),谷歌I/O大会上正式发布。
体系架构
Android系统架构图
系统结构
Android 随附一套用于电子邮件、短信、日历、互联网浏览和联系人等的核心应用。平台随附的应用与用户可以选择安装的应用一样,没有特殊状态。因此第三方应用可成为用户的默认网络浏览器、短信 Messenger 甚至默认键盘(有一些例外,例如系统的“设置”应用)。系统应用可用作用户的应用,以及提供开发者可从其自己的应用访问的主要功能。例如,如果您的应用要发短信,您 无需自己构建该功能,可以改为调用已安装的短信应用向您指定的接收者发送消息。
也就是可以调用系统或是已经设置的应用为自己编写的Android服务。
应用组件
组件名 | 作用 |
---|---|
活动 (Activity) | 程序的根本。一个Android 应用是由多个Activity 组成的,这多个Activity之间Android的应用 可以进行相互跳转。 |
服务 (Service ) | 组件。不能自己运行, 只能后台运行,并且可以和其他组件进行交互。Service 是没有界面的长生命周期的代码。 |
广播接收器 (broadcastReceiver ) | broadcast是一种广泛运用的在应用程序之间传输信息的机制 |
内容提供者 (Content Provider ) | Content Provider是Android提供的第三方应用数据的访问方案 |
平台优势
- 开发性
在优势方面,Android平台首先就是其开放性,开发的平台允许任何移动终端厂商加入到Android 联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。
开放性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机 - 丰富的硬件
这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪, 功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容,如同 从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移。 - 方便开发
Android平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏 如何控制正是留给Android难题之一。 - Google应用
在互联网的Google已经走过10年度历史,从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台手机将无缝结合这些优秀的 - Google服务
3.操作系统简单介绍 操作系统发展历史 批处理分时系统 操作系统是什么 操作系统对文件的抽象 进程 虚拟内存是什么 操作系统作用 操作系统功能
操作系统
其实 操作系统并不是与计算机硬件一起诞生的
它是在人们使用计算机的过程中,为了管理硬件资源,提高性能提高资源利用率,而逐步地形成和完善起来的。
操作系统也是一种程序,负责管理系统资源
上电自检(经过BIOS)之后,处理器第一个要处理的程序
之所以叫做操作系统,其实就相当于它提供了一个工作台
让你可以更加方便的操作计算机的软硬件资源
是机器的一种封装,对于人机交互提供了统一的操作方式
批处理
自从第二代晶体管计算机之后,计算机的性能有了很大的提升
与之矛盾的自然是计算机手动输入速度慢
为了提供系统利用率,出现了批处理系统
用户将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行。
显然不具备任何交互性,只是提高了系统的利用率
其中有
联机批处理系统,联机就是主机自己来控制输入输出
输入输出时,计算机的CPU是空闲的,需要等待数据传输完成
脱机批处理系统就是输入输出不在交由主机处理,托管到另一个台机器
显然,处理机和主机可以并行工作,他们通过高速磁带进行对接
但是仅仅只能执行一个程序
人们当然希望计算机可以同时执行多个任务
多道程序系统
然后很自然的出现了多道程序系统
允许多个程序同时进入内存并运行
交替在CPU中运行,它们共享系统中的各种硬、软件资源。
多道批处理系统
顾名思义就是批处理与多道程序的结合,兼顾了多道与批处理的优点
不过没有交互性
分时系统
把CPU时间分成时间片,各个任务按照时间片轮流执行,分时就是分配时间片
分时系统的实时性交互性比多道程序有更大的提高
实时系统
还有一些特定的场景,对于实时性要求更高,比如军事设备等
分为实时控制系统/实时信息处理系统
响应更加及时,更加可靠,平时场景一般是用不到的
可以看得出来,操作系统的发展中有几个主要矛盾
CPU性能与手工操作的矛盾
CPU性能与输入输出的矛盾
运行单一任务与希望可以执行多程序之间的矛盾
交互性差和希望可以提供更强交互性之间的矛盾
实时性差与希望可以提供更加实时可靠系统之间的矛盾
功能单一与希望可以提供通用功能系统之间的矛盾
整个发展过程就是为了解决这些矛盾
发展的结果也就是CPU的利用率大幅度上升,功能更加完备
可以同时执行多个任务
实时性交互性更高更可靠
也出现了更为通用的计算机
操作系统的类型更多的可以理解为逻辑上的意义,他们可以相互结合,比如上面的多道批处理
还有分时批处理 实时批处理 等
Unix是最早的通用操作系统
此后又出现了linux/windows/苹果
操作系统概括总结
计算机由硬件和软件构成
我们可以认为操作系统是计算机软件程序和硬件之间的一个薄层
这个薄层封装了底层的硬件实现
基本功能是:
防止硬件被应用程序随意滥用,并且向应用程序提供了简单一致的机制来控制各种不同的硬件设备
操作系统通过几个基本的抽象概念来达到这个目的
/虚拟内存/进程/文件/
既然是抽象,那自然是像译码器一样,转换了一种描述呈现表达操作方式
文件
文件是对IO设备的抽象
就是字节序列而已,所以每个IO设备,哪怕是键盘显示器都可以看成是文件
向应用程序提供了一个统一的操作视图
也可以理解为格式,也就是对于所有程序来说 所有的文件都是这样子的
不管你到底是什么样子的IO设备,应用程序完全不用关注他具体的样子
操作系统会提供一致性的解决方案
虚拟内存
虚拟内存是对主存和磁盘I/O的设备的抽象
是计算机系统内存管理的一种技术。
它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间)
好像自己都独占使用主存
通过提供连续的内存空间,每个进程看到的虚拟地址空间由大量的固定的区块构成
其实可以理解为户型图,每个进程的户型都一样
包括程序代码和数据区/堆/栈 等
他们看到的地址空间是一致的
而不用你自己费心的去管理地址
现在的计算机都可以多任务同时执行,之前提到的中断正是这种功能的硬件基础
没有哪个程序会一直独占处理器
每个程序都需要内存,想要多任务运行自然需要更多的内存
怎么才能在有限的内存空间服务于越来越多的程序呢?
注意到,虽然内存中有许多个程序同时运行,但是同一时间点,只有一个处理器在执行
如果内存不够的话,可以让暂时不用的数据和代码 存放到磁盘
腾出来空间加载将要使用的部分
如果需要的话,再将它们用同样的方式加载回来
这样编写程序的时候,不用关注到底是否有内存可用,
对于当前程序,他会假定他肯定有足够的内存使用
因为这部分内存并不存在,而是位于磁盘上,所以叫做虚拟内存
硬盘的速度是很慢的,如果需要访问的内容不在内存中,而是从磁盘载入,代价是巨大的
所以计算机自然会很慢
也就是说,虚拟内存牺牲执行效率换执行空间(同时运行更多的程序)
对于程序员来说,操作系统提供的虚拟内存,可以说是给程序的运行提供了统一的内存空间
进程
进程是对处理器 主存 I/O设备的抽象
每个程序在计算机上运行,看上去可以独占的使用处理器,主存和I/O设备
处理器好像在不间断的一条接一条的执行程序中的指令
对于程序来说好像只有他自己的程序的代码和数据在内存中
好像跟其他的正在运行的应用程序并没有关系
这是操作系统提供的一种假象,这就是进程的概念
进程是对处理器 主存 I/O设备的抽象,也即是一个正在运行的程序的一种抽象
进程也是硬件中断以及系统cpu时间片调度的产物
一个正在运行的程序,这是一件抽象的事情,
想要把它具体的映射到系统中,而且还能有中断,还能够重新返回现场继续执行
你必须用具体的信息去描述记录跟踪它的运行
操作系统保持跟踪进程运行时所需要的所有信息,这种信息也叫作上下文
它包括很多信息,自然取决于操作系统的底层实现
可能包括PC和寄存器的值,主存的内容等
操作系统想要把控制权从当前进程转移到某个新的进程,就会进行上下文切换
也就是保存当前的上下文,恢复进程的上下文
当然现代操作系统一个进程又实际的被分为多个称之为线程的执行单元组成
每个线程都运行在进程上下文,共享同样的代码和全局数据
操作系统也是计算机发展中的一个伟大创举
他隐藏了大量的底层细节,提供了大量方便的抽象
总结:
操作系统就是对硬件的封装,提供简单统一的访问形式.
Android MK 简介(一)
Android.mk简介:
Android.mk文件用来告知NDK Build 系统关于Source的信息。 Android.mk将是GNU Makefile的一部分,且将被Build System解析一次或多次。所以,请尽量少的在Android.mk中声明变量,也不要假定任何东西不会在解析过程中定义。
Android.mk文件语法允许我们将Source打包成一个"modules". modules可以是:
静态库
动态库。
只有动态库可以被 install/copy到应用程序包(APK). 静态库则可以被链接入动态库。
可以在一个Android.mk中定义一个或多个modules. 也可以将同一份source 加进多个modules.
Build System帮我们处理了很多细节而不需要我们再关心。例如:你不需要在Android.mk中列出头文件和外部依赖文件。NDK Build System自动帮我们提供这些信息。这也意味着,当用户升级NDK后,你将可以受益于新的toolchain/platform而不必再去修改Android.mk.
Android.mk语法:
首先看一个最简单的Android.mk的例子:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
讲解如下:
LOCAL_PATH := $(call my-dir)
每个Android.mk文件必须以定义LOCAL_PATH为开始。它用于在开发tree中查找源文件。
宏my-dir 则由Build System提供。返回包含Android.mk的目录路径。
include $(CLEAR_VARS)
CLEAR_VARS 变量由Build System提供。并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx.
例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理LOCAL_PATH. 这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能避免相互影响。
LOCAL_MODULE := hello-jni
LOCAL_MODULE模块必须定义,以表示Android.mk中的每一个模块。名字必须唯一且不包含空格。Build System会自动添加适当的前缀和后缀。例如,foo,要产生动态库,则生成libfoo.so.
但请注意:如果模块名被定为:libfoo.则生成libfoo.so. 不再加前缀。
LOCAL_SRC_FILES := hello-jni.c
LOCAL_SRC_FILES变量必须包含将要打包如模块的C/C++ 源码。不必列出头文件,build System 会自动帮我们找出依赖文件。
缺省的C++源码的扩展名为.cpp. 也可以修改,通过LOCAL_CPP_EXTENSION。
include $(BUILD_SHARED_LIBRARY)
BUILD_SHARED_LIBRARY:是Build System提供的一个变量,指向一个GNU Makefile Script。它负责收集自从上次调用 include $(CLEAR_VARS) 后的所有LOCAL_XXX信息。并决定编译为什么。
BUILD_STATIC_LIBRARY:编译为静态库。
BUILD_SHARED_LIBRARY :编译为动态库
BUILD_EXECUTABLE:编译为Native C可执行程序
未完 下篇将介绍NDK Build System
Android Sensor详解(1)简介与架构【转】
本文转载自:https://blog.csdn.net/u013983194/article/details/53244686
最近在学习有关如何porting sensor的东西,仅借此机会写博客来督促自己进步,当然如果,有人对博客提出不同的理解,我觉得这是极好的,大家可以共同进步。在这一期的博客中,将详细分析sensor的东西。从底层到上层,从fw到上层。至于<漫谈android系统>这系列的文章,我将会持续更新.
Android Sensor框架
由上图就可以看到现在的android系统的sensor很多都是走的adsp。底层的sensor集成在adsp中sensor manager将数据进行打包后,放在共享的内存中,由上层去共享内存解析数据包,最后拿到数据给上层做各种操作。
而在Android Sensor 架构深入剖析 该文中,指出了内核,HAL层是用户实现,其实这一块基本上是由BSP与厂商一起co-work完成。
手机sensor类别
陀螺仪\加速度传感器 (g sensor)、磁力传感器(hall sensor)、方向传感器(ecompass sensor)、环境光照传感器(light sensor)、距离传感器(proximity sensor)
当然还有关于温度的sensor现在基本上都是用热敏电阻工作。高通有这一整套关于thermal系统去检测机台的温度。当然在这里,我们主攻是sensor,就先不考虑这个了。
有人就说了,手机中那么多的sensor,你咋么才指出那么一点东西。其实有很多就是通过算法将几个sensor合在一起工作,就变成了其他的sensor。
如何查看手机中的sensor
android sensor box可谓是android中查看sensor工作状态的神器,用该apk能够详细地看到sensor的东西。
Android Service简介(系列1)
Android Service简介(系列1)
Android Service是Android重要的组件,在开发中会有用到和涉及。本文先给出一个最简单的Android Service例子。
(第1步)写一个类继承自Service,假设这个类的名字叫做MyAppService.java,重点是完成两个方法:
Service的onCreate和onStartCommand方法。
onCreate仅仅在Service第一次被startService时候初始化操作一次,随后不管再怎么startService,都不会再onCreate了。
耗时的、后台的、不需要用户交互的操作放在onStartCommand里面处理。需要强调一点,Android的Service并不是一个单独的进程、线程空间,是和Android主线程共享进程空间,这就意味,不要在onStartCommand方法里面阻塞主线程,否则将造成ANR!如果在onStartCommand里面有耗时操作,那么务必将onStartCommand里面的耗时操作代码块放到线程里面做。(注意!次说仅仅针对Service,IntentService和Service机制不同,不存在此问题,但有其自身特点,后面文章再说。)
Service的onDestroy只会被调用一次,那就是Service被stopService或者stopSelf时候。
完整的MyAppService.java代码:
package zhangphil.service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class MyAppService extends Service {
// 仅仅create一次
@Override
public void onCreate() {
Log.d(this.getClass().getName(), "onCreate");
}
// 在这里处理耗时、后台、无需用户交互的‘重口味’操作。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(this.getClass().getName(), "hello,service!");
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
Log.d(this.getClass().getName(), "onDestroy");
}
}
(第2步)在AndroidManifest.xml定义第1步写的Service,在本例中是MyAppService,如代码:
<application
...
<service android:name="zhangphil.service.MyAppService" />
...
</application>
(第3步)接下来就可以在自己的activity中通过startService和stopService启动、停止Service了,如代码所示:
Intent intent=new Intent(activity,MyAppService.class);
activity.startService(intent);
...
Intent intent=new Intent(activity,MyAppService.class);
activity.stopService(intent);
我们今天的关于Android操作系统简介和1的分享就到这里,谢谢您的阅读,如果想了解更多关于3.操作系统简单介绍 操作系统发展历史 批处理分时系统 操作系统是什么 操作系统对文件的抽象 进程 虚拟内存是什么 操作系统作用 操作系统功能、Android MK 简介(一)、Android Sensor详解(1)简介与架构【转】、Android Service简介(系列1)的相关信息,可以在本站进行搜索。
本文标签: