安卓app运行机制:

来源:互联网 发布:微信淘宝优惠券赚钱吗 编辑:程序博客网 时间:2024/05/01 01:21

安卓app运行机制:(google 官方文档提取)

一、app在系统中是怎样存在的

1. 安装apk(运行在各自的沙盒中)

1.1 因为安卓是一个多用户的Linux系统,所以每个app就相  当于一个不同的用户

1.2 每个app,系统都会给它一个独特的ID,然后分配不同的权限给app

1.3 每个进程,都会拥有自己的虚拟机(virtual machine), 所以每个app的代码都是独立于其他app运行的

1.4 默认情况下,每个app都在自己的Linux进程上运行。当程序的组件运行时,Android系统就会启动这个进程,当程序被关闭,或者Android系统内存不足的情况下,会关闭这个进程


2. 通过以上描述,发现每个Android app都是独立运行的,无法跨越自己的权限访问。但是,Android系统提供了让app之间分享数据以及访问系统服务的方法

2.1 两个不同的app是有方法共享一个Linux用户ID的,因此,他们能够相互访问各自的文件。为了节约系统资源,两个拥有相同用户ID的app也能够被安排运行在同一个Linux进程和同一个VM中。具体方法可以将manifest中设置。

2.2 app可以请求权限使其访问设备数据,例如联系人,短信,SD卡信息,相机,蓝牙以及其他等。所有的用户权限都需要用户在安装app时授权


二、app组件

app组件是构成Android app的基础组件。Android有四大基本组件,每个不同的组件提供不同的功能,并且有着不一样的生命周期。

1. Activities  每个界面,就是一个Activity,继承子类Activity(如用户看到的界面)

2. Services  每个service是一个运行在后台的组件,能够实现长时间运行和远程操作。service不提供用户界面。继承子类Service(如后台播放音乐)

3. Content providers 能够管理app之间的数据共享。通过内容提供者,其他的app可以访问甚至修改app保存的数据。继承子类ContentProvider(如某些app可以修改系统的联系人)

4. Broadcast receivers 能够接收系统的广播事件。继承子类BroadcastReceiver (如系统发出电量过低或者锁屏的广播)


*Android有个独特的地方就是app可以调用其他app的组件,比如说你的app可以通过很简单的方法调用系统相机,并且讲拍摄的照片返回给app。

*当系统启动了一个组件,app就会被启动在系统的进程之中,并且初始化所有需要用到的类。举个例子,你的程序调用了系统相机,那么运行的进程就属于系统相机,而不是你的app进程。因此,不像其他系统中的app,Android app不会有一个单一的进入点(main函数)

三、启动组件

1. activity、service、broadcast都是通过intent来启动的。Intent可以启动你的app中的组件,也可以启动其他app中的组件。Intent可以是显式的,也可以是隐式的。

对于activity和service来说,intent定义了他们的动作(如view或者send)以及一些具体的URI。

对broadcast receiver来说,intent定义了要广播的内容。


2. ContentResolver无法通过Intent来激活,他必须通过ContentResolver来激活。


系统识别组件是否能通过intent被其他app调用,是通过在manifest文件中定义的intent filters。如果你在你的app中定义了一个intent filters,那个其他app就可以通过这个来调用你的app组件


四、Manifest.XML的作用

在系统启动app组件之前,系统必须知道app有多少组件,具体怎么知道的,就是通过Manifest.XML这个文件。你的app组件必须在这个文件中进行声明,而且必须是在<application/>的根目录下。

Manifest做了以下几件事:

1. 定义用户访问权限

2. 声明最小需要的API等级

3. 声明硬件和软件需要,如相机、蓝牙、触摸屏等

4. API库和需要链接的API库(如google map)


0 0
原创粉丝点击