应用的基本原理

文章地址:https://developer.android.com/guide/components/fundamentals.html html

一旦安装到设备上,每个app就存活在本身的安全沙箱中。
android

一、android操做系统是一个多用户的Linux系统,每个应用是不一样的用户web

二、默认,系统会给每个应用分配一个惟一的Linux用户id(这个id只能被系统使用,对于应用是不可知的)。一个应用中的所用文件系统都会设置权限。有分配对应用户id的应用才能访问他们。数据库

三、每一个进程有本身的虚拟机,因此应用代码是运行在于其余应用隔离的空间中。安全

四、默认,每一个应用运行在本身的Linux进程中。只要这个应用中的任何组件被执行Android就会启动这个进程,若是他们再也不须要或是为了其余应用要恢复内存这时会关闭进程。app

然而,还有须要方法让一个应用与其余应用分享数据和访问系统服务。
ide

一、能够安排两个应用共享同一Linux用户id,使得他们能访问互相的文件。为了保持系统资源,有一样用户id的应用也被安排运行在一样的Linux进程中并分享一样的虚拟机(这些应用必须用一样的签名注册)。ui

二、一个应用能够请求权限访问设备数据如联系人、短信等。全部的应用权限必须在用户安装的时候设定。spa


有4中不用类型的应用组件。每种类型提供了不一样的目的、有不一样的生命周期定义的组件如何建立和销毁。操作系统

一、Activities

二、Services

三、Content providers ,一个content provider 管理一组被分享的应用数据。你能够把这些数据存储在系统文件中、数据库中、web上、或是其余你的应用能够访问的持久存储的地方。经过content provider,其余应用能够查询甚至修改数据。

四、Boradcast receivers

有单独的方法激活每种类型的组件

一、经过传递Intent调用startActivity()或是startActivityForResult()方法

二、经过传递Intent调用startService()或是bindService()方法

三、能够定义一个broadcast经过Intent传递调用sendBroadcast()、sendOrderedBroadcast()或是sendStickyBroadcast()。

四、你能够执行一个查询给content provider经过调用ContentResolver的query()。


在android系统启动一个应用组件以前,必须经过读取应用的manifest文件知道他们的存在。你必需要这个文件申明全部的组件。经过在manifest文件中定义一下元素(<activity>,<service>,<receiver>,<provider>)。

Activities、services和content providers必须在manifest中申明,不然系统将不可见,没法运行。然而,broadcast receivers除了在manifest中申明也能够在代码中动态建立,经过调用registerReceiver()方法。

申明的功能若是设备不支持的话,应用将没法安装,你也能够申明这个功能但不请求他,但必须设置required为false,这样能够确保运行环境中有这个功能,可是不会使用它们。

<uses-feature android:name="android.hardware.camera.any"
                 
android:required="false" />
相关文章
相关标签/搜索