文章地址: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" />