什么是安卓?
每个安卓应用都处于各自的安全沙盒中,同时安卓应用授予很多安全的功能保护
1.安卓操作系统是一种多用户的Linux操作系统,其中每个应用就是每个不同的用户
2.默认情况下,系统会给每个用户分配唯一的Linux用户ID(此ID只用于系统中,用户不感知)。系统会为应用的所有文件设置对应的权限,保证只有此用户才能访问对应的文件。
3.每个进程都有自己的虚拟机。因此应用代码独立于其他应用运行
4.每个应用默认在各自的Linux进程中运行。系统会在需要运行该进程时启动进程,当不再需要或者必须为其他应用恢复内存,则关闭进程
安卓系统实现了最小授权原则。默认情况下,每个应用都是访问各自的组件。但是应用可以通过一些方式与其他应用共享数据以及访问系统数据
1.应用可以请求访问设备数据(用户联系人,短信消息,相机蓝牙等)的权限。但是此操作必须经过用户明确授予。
2.可以使得两个或者更多的应用共享同一个Linux用户ID,此情况下,二者便可以共享数据。为了节省系统资源,也可以拥有相同用户ID的应用运行在同一个Linux进程中,共享同一个VM。应用还必须使用相同的证书进行签名。
安卓的核心框架组件简介
组件
组件:构建安卓应用的基本模块,组件可以理解为是入口点,系统或者用户进入安卓应用的入口。组件与组件之间是可以相互依赖的。有如下不同的组件类型:
1.Activity
2.服务
3.广播接收器
4.内容提供程序
每个类型都有自己的生命周期。
Activity
Activity:是用户和系统交互的入口。它表示拥有界面的单个屏幕,可以简单理解为:手机的以整个屏幕界面为单位的就是一个Activity。
服务
服务:是一个通用的入口点,用于因各种原因使应用在后台保持运行状态。它是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业。服务是不提供界面的;最明显的例子就是:当用户和其他的Activity进行交互时,后台可以继续播放音乐或者通过网络获取数据。
广播接收器
广播接收器:通过广播接收器,系统可以在常规用户流之外向应用传递事件,从而允许应用响应系统范围内的广播通知。广播接收器常常用于通向其他组件的通道
内容提供程序
内容提供程序:内容提供程序管理一组共享的应用数据,可以将这些数据存储在文件系统,数据库,网路中或者应用可以访问的任何其他持久化存储位置。其他应用可通过内容提供程序查询或修改数据。内容提供程序也适用于读取和写入应用不共享的私有数据。
安卓应用的独特之处在于:安卓应用并没有单个入口点(即类似的main()
函数),任何应用都可以启动其他应用的组件。比如可以在A应用直接调用照相机进行拍摄。在代码中,完全不必链接照相机的代码到A应用中,只需要在A应用中启动相机的Activity就可以了。就好像相机是A应用的一部分。安卓系统完成这一个工作只需要向系统传递一条消息告诉系统我要启动特定的组件的Intent
,随机组件就会启动
启动组件
有三种组件(Activity,服务和广播接收器)均通过异步消息Intent
进行启动。Intent会在运行时对各个组件进行互相绑定。所以可以将intent
视为从其他组件请求操作的信使。使用过程中需要使用Intent
对象创建Intent,该对象通过定义消息来启动特定组件(显示Intent)或特定的组件类型(隐式Intent);
内容提供程序并非由Intent启动,相反,它们会在成为ContentResolver
的请求目标时启动。
声明组件必要的清单文件
安卓系统启动前,需要读取应用的清单文件(AndroidManifest.xml
),以此来确认组件是否存在。此文件必须要包含所有的组件,且要位于项目目录的根目录
除了声明应用组件之外,清单文件还有其他作用:
1.确定应用需要的任何用户权限,如互联网访问权限或对用户联系人的读取权限。
2.声明应用使用或需要的硬件和软件功能,如相机、蓝牙服务或多点触摸屏幕。
3.声明应用需要链接的 API 库(Android 框架 API 除外),如 Google 地图库
4.根据应用使用的 API,声明应用所需的最低 API 级别
必须使用以下元素声明所有应用组件:
- Activity 的
<activity>
元素。 - 服务的
<service>
元素。 - 广播接收器的
<receiver>
元素。 - 内容提供程序的
<provider>
元素。
如果未在清单文件中声明源代码中包含的 Activity、服务和内容提供程序,则这些组件对系统不可见,因此也永远不会运行。不过,您可以 BroadcastReceiver
对象的形式,在清单中声明或在代码中动态创建广播接收器;以及通过调用registerReceiver()
,在系统中注册广播接收器。
后续会针对安卓中的每一个细节,进行学习~开始上路吧:)
网友评论