敲了这么长时间代码,记录一下我对Android的一些概念,下面大部分内容来源自网络资料和官方给的文档。
1,Android操作系统的核心属于Linux的一个分支,具有典型的Linux调度和功能,为了Linux在移动设备上更好的运行,Google对其进行修改和扩充,修修改改便成了现在我们所见到的Android系统。
2,通常,我们使用Java编程语言来编写Android项目,有时我们可能还会用到JNI,C/C++来完成其他Android框架无法完成的功能或者处于其它目的。对于JNI部分,我们NDK来将其编译成.so动态库文件,放置在项目的指定位置,并且在需要用到的Java类中进行装载和调用。在我们手动完成对JNI部分的处理以后,Android SDK便将我们所编写的Java代码和项目中包含的其他数据及资源打包成一个.apk(Android编译器提供一个dx工具,将Java类文件转换成dex文件。然后通过aapt将Android项目中的所有数据打包成一个.apk文件)后缀的文件,该文件便可安装在Android操作系统上运行使用。
3,对于apk的运行我们必须了解的是:
a,Android操作系统是一个多用户Linux系统,其中的每个应用都是一位不同的用户。
b,默认情况下,系统会为每个应用分配一个唯一的Linux用户ID(该ID由系统使用,应用不能获取)。系统还对应用中的所有文件设置权限,似的只有分配给该应用的用户ID才能访问这些文件。
c,每个用户(进程)都有自己的虚拟机,因此应用代码是在与其他应用隔离的环境中运行的。
d,默认情况下,每个应用在自己的Linux进程中运行。Android会在需要执行任何应用组件时启动该进程,然后在不再需要该进程或系统必须为其他应用恢复内存时关闭该进程。
4,Android一开始使用的虚拟机是Dalvik虚拟机,在4.4系统以后使用ART虚拟机。ART与Dalvik的不同之处,主要是在成员安装时,便将apk中的代码转换成机器码,以此来提升运行效率,比以往使用JIT的Dalvik虚拟机效率高。
Android 系统可以通过这种方式实现最小权限原则。也就是说,默认情况下,每个应用都只能访问执行其工作所需的组件,而不能访问其他组件。 这样便营造出一个非常安全的环境,在这个环境中,应用无法访问系统中其未获得权限的部分。
不过,应用仍然可以通过一些途径与其他应用共享数据以及访问系统服务:
a,可以安排两个应用共享同一 Linux 用户 ID,在这种情况下,它们能够相互访问彼此的文件。为了节省系统资源,可以安排具有相同用户 ID 的应用在同一 Linux 进程中运行,并共享同一 VM(应用还必须使用相同的证书签署);
b,应用可以请求访问设备数据(如用户的联系人、短信、可装入存储装置 [SD 卡]、相机、蓝牙等)的权限。所有应用权限都必须由用户在安装时授予。
在一开始学习Android编程的时候,我们最开始接触的应该就是四大组件了。它们是Android的基本构建模块,每个组件都是一个不同的饿点,系统可以通过它进入应用中。但是不是所有组件都是用户的实际入口点,每个组件都是独立存在的,发挥各自不同的作用。
应用组件是 Android 应用的基本构建基块。每个组件都是一个不同的点,系统可以通过它进入您的应用。并非所有组件都是用户的实际入口点,有些组件相互依赖,但每个组件都以独立实体形式存在,并发挥特定作用—每个组件都是唯一的构建基块,有助于定义应用的总体行为。
共有四种不同的应用组件类型。每种类型都服务于不同的目的,并且具有定义组件的创建和销毁方式的不同生命周期。
以下便是这四种应用组件类型:
Activity
Activity表示具有用户界面的单一屏幕。例如,电子邮件应用可能具有一个显示新电子邮件列表的 Activity、一个用于撰写电子邮件的 Activity 以及一个用于阅读电子邮件的 Activity。 尽管这些 Activity 通过协作在电子邮件应用中形成了一种具有凝聚力的用户体验,但每一个 Activity 都独立于其他 Activity 而存在。 因此,其他应用可以启动其中任何一个 Activity(如果电子邮件应用允许)。 例如,相机应用可以启动电子邮件应用内用于撰写新电子邮件的 Activity,以便用户共享图片。
服务
服务 是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业。 服务不提供用户界面。 例如,当用户位于其他应用中时,服务可能在后台播放音乐或者通过网络获取数据,但不会阻断用户与 Activity 的交互。 诸如 Activity 等其他组件可以启动服务,让其运行或与其绑定以便与其进行交互。
内容提供程序
内容提供程序 管理一组共享的应用数据。您可以将数据存储在文件系统、SQLite 数据库、Web 上或您的应用可以访问的任何其他永久性存储位置。其他应用可以通过内容提供程序查询数据,甚至修改数据(如果内容提供程序允许)。 例如,Android 系统可提供管理用户联系人信息的内容提供程序。因此,任何具有适当权限的应用都可以查询内容提供程序的某一部分(如 ContactsContract.Data
),以读取和写入有关特定人员的信息。
内容提供程序也适用于读取和写入您的应用不共享的私有数据。 例如,记事本示例应用使用内容提供程序来保存笔记。
广播接收器
广播接收器 是一种用于响应系统范围广播通知的组件。 许多广播都是由系统发起的—例如,通知屏幕已关闭、电池电量不足或已拍摄照片的广播。应用也可以发起广播—例如,通知其他应用某些数据已下载至设备,并且可供其使用。 尽管广播接收器不会显示用户界面,但它们可以创建状态通知栏通知,在发生广播事件时提醒用户。 但广播接收器更常见的用途只是作为通向其他组件的“通道”,设计用于执行极少量的工作。 例如,它可能会基于事件发起一项服务来执行某项工作。
在Android系统启动应用组件之前,系统必须通过读取应用的“AndroidMainfest.xml”文件来确认组件是否存在。绝大部分组件都必须在清单文件中声明。除了声明组件,清单文件还有许多其他作用:
1,确定应用需要的任何用户权限。
2,根据应用使用的API,声明API最低级别。
3,声明应用使用或需要的硬件和软件功能,如相机、蓝牙和多点触摸屏幕
4,声明需要连接的API库,如Google Maps API库
5,其他功能