应用程序基础

来源:互联网 发布:暗黑破坏神3 数据库 编辑:程序博客网 时间:2024/05/01 16:41
Android应用程序是基于Java的。代码、资源、数据最后被编译到一个.apk文件里。该.apk文件被认为是一个应用程序。
应用程序安装到设备后,就拥有了自己的sandbox运行环境以保证系统的安全。

- Android操作系统是多用户的Linux系统。每个应用程序被认为是一个用户。
- 系统会给每个应用程序一个Linux User ID。然后给应用程序的所有文件设立权限,保证只有该ID的应用程序才能访问它们。
- 每个进程拥有自己的虚拟机。不同的应用各自独立运行。
- 默认情况下,每个应用运行于自己的Linux进程之下。若应用程序的某个组件需要启动,则Android系统启动它的Linux进程。
- Linux User ID可以被不同的应用程序共享。从而可以互访双方的文件。而且,它们会运行于同一个Linux进程内,共享同一个VM。

所谓的应用程序组件,指的是拥有独立的执行入口的实体。但并不是拥有执行入口就可以被用户启动。只有部分入口是为用户开放的。其余的执行入口都是为了组件之间的调用而设立的。
Android有四种组件:
- Activity
代表着和用户交互的运行实体。比如一个邮件客户端应用程序,可以有很多Activity。有的负责显示新邮件,有的负责编辑邮件。都是和用户输入打交道的。
- Service
运行于后台,执行长期的运算任务。没有UI。比如在后台播放音乐的服务。这样的服务可以由上面的Activity来启动、绑定,然后交互。
- Content Provider
管理应用程序要长期保存的数据。应用程序可以把数据存储到文件、SQLite数据库、或者网络。Content Provider负责不同应用程序对这些共享数据的访问。比如电话联系人。
当然,它也可以管理私有数据。
- Broadcast Receiver
负责接收Android系统消息。比如屏幕关闭、电池电量低、截屏,这些都以广播的形式由系统发送。应用程序也可以发放自己的广播。
无UI。但可创建状态栏,以通知用户。

Android系统的特色是,一个应用程序的组件,可以启动任意其它应用程序的某个组件。比如,你的应用程序可以使用其它应用开发的摄像头去捕捉图像。
但应用之间的通信不是直接进行的。
Activity、Service和BroadcastReceiver是使用Intent这种异步消息,由系统根据Intent描述的特征,去寻找合适的应用。
对于Activity和Service来说,Intent要定义“动作”(ACTION,比如view或send),有时再加上一个URI。然后再发送出去。
ContentProvider不使用Intent。而是ContentResolver。由它处理和ContentProvider之间的交易。

- 启动Activity:startActivity(Intent) startActivityForResult(Intent,int)
- 启动Service:startService(Intent) bindService(Intent,ServiceConnection,int)
- 启动广播:sendBroadcast(Intent) sendOrderedBroadcast(Intent,String) sendStickyBroadcast(Intent)
- 对ContentProvider执行查询:ContentResolver.query()

在AndroidManifest.xml中声明应用程序组件:
- <activity>
- <service>
- <receiver>
- <provider>
Activity、Service和BroadcastReceiver都可以定义<intent-filter>来描述ACTION等信息。

为确保应用程序安装到正确的设备上,使用下面属性声明系统必需:
- <supports-screens>
- <uses-configuration>
- <uses-feature>
- <uses-sdk>