Android SDK介绍:
Android SDK 会将应用内容打包成一个.apk后缀的文件(包括了逻辑代码,应用所需要的资源文件)。对于Android应用系统,就一多用户的Linux系统,所有的应用都在该系统下的一个用户,每一应用会被系统分配一个唯一的ID。因此不同的应用都要自己的资源和进程。
Android对应用的数据保护(安全沙盒)有以下约束:
- 每一个应用由于都有自己的唯一id,因此除了人为将多个应用设置同一id情况下,不然应用不能访问彼此的资源。
- 每一个应用都有自己的进程和虚拟机,因此在需要运行的情况下Android系统会启动应用的进程,在不需要的情况下对进程的关闭释放内存。
- 对所有的应用实现了最小访问权限,即每一个应用只能访问自己需要的组件和资源,从而实现对应用的保护。(可以人为的设置不同的应用使用同一ID从而实现彼此资源的访问,亦或者通过应用对某一功能申请权限也可以实现使用其他资源的目的)
Android的应用组件介绍:
Android的应用组件作为程序入口,系统和用户可以通过这些入口访问应用程序,同时不用的应用组件之间也存在着依赖关系。同时不同的组件也有有自己的应用场景和生命周期,后者决定了组件的创建和销毁。
- 活动Activity
- 广播Broadcast
- 服务Service
- 内容提供者ContentProvider
Activity 活动:
Activity是用户与程序交互的主要的应用组件,一般占据整个屏幕(手机屏幕)尺寸大小。当存在多个Activity的时候,Activity之间相互独立不收影响,同时一个屏幕只允许一个Activity呈现出来(一旦启动了另一个Activity则会将当前的Activity放进后台)。合理使用Activity能有助于程序和系统对用户的交互体验。
- 通过Activity能够追踪用户感兴趣的内容,从而告诉系统需要保留哪些进程
- 通过Activiy能够获取用户之前所浏览的信息,从而保留更有用的内容
- 通过Activity能够帮组程序记录终止位置,能够更好地恢复原先的状态
- 通过Activity能够实现系统与应用程序之间的用户流交互(经典的例子:共享。)
Service 服务:
Service服务主要的应用场景是能够实现程序保持运行状态的情况下,允许用户执行其他的操作,例如浏览网页,打开其他应用程序等等。也就是说,更多时候服务是处于后台运行,和Activity对比,不具备可视化页面操作,服务的存在更多是实现在后台使得应用程序能够同步数据,或者保持程序的运行状态(经典例子:音乐播发器)。但还要注意的是,服务Service需要依赖于其他的应用组件来启动(Activity等),一旦Activity启动了服务之后,那么服务就会绑定在Activity中(Service服务的生命周期也与之有光)。现在服务有着更广阔的使用范围:例如动态壁纸,通知监听器等等。
Broadcast 广播:
Broadcast广播的存在,可以使得系统在用户流之外向应用程序传递事务。广播作为程序的入口,即使应用程序尚未运行,也可以通过由系统发送的广播,对广播接收后执行某些特定的响应。虽然广播能够处理一些特定的需求,但是广播的宗旨是处理极小量的工作任务,广播更多时候也应用于对一些可预测的事情向用户发送通知(天气预报,电量剩余量通知等等)
ContentProvide 内容提供程序:
ContentProvide更多时候是负责管理一组共享的应用数据,允许用户将数据保存在文件数据,SQLite数据库以及其他可允许访问的持久化位置。也允许用户对其中的数据读取或者修改(如果有一定的权限话),虽然ContentProvide内容提供程序提供了大量的API能够实现和数据库一样的功能,但从设计的角度来看本质上和数据库是两种不同的核心目的。