应用程序基本原理:java
android应用程序是用java语言编写的,android SDK工具在APK(Android package)里编译代码(数据文件和资源文件)。apk是一个后缀为.apk的档案文件,1个apk文件包含了android应用程序的全部内容,apk是用来安装应用程序的基于android的设备。一旦安装了apk文件,每一个app运行在本身安全的沙盒中。android
android操做系统是一个多用户的Linux操做系统,每个app有一个不一样的用户。数据库
系统默认给各自的app分配一个惟一的Linux用户ID,ID只被系统使用,对于app来讲,ID是个未知数。系统给全部app文件设置了权限,只有分配了用户ID后,app才能够运行。安全
每一个进程有他们本身的虚拟机,所以app运行时是与其余app隔离的。网络
全部app运行须要他们本身的Linux进程。当一些app的组件须要被执行时,就运行他们各自的进程。当再也不须要组件或须要给他app释放内存时,关闭进程app
用这种方法,每一个app实现最小特权原则——默认状况下,每一个app只能访问到它的工做所须要的最少的权限。这将建立一个很是安全的环境:每个应用程序不能访问系统没有给予它权限的任何一个部分。框架
可是,还有一些方法可让app与其余app分享数据,或者使用系统资源。ide
给两个app共享同一个Linux用户ID是可能的,在这种状况下,他们能够访问彼此的文件。为了节省系统资源,使用同一个用户ID的app能够在同一个Linux进程中运行并分享同一个虚拟机(应用程序也必须使用相同的证书签名)工具
app能够请求权限使用设备数据,好比用户的联系人,短信群发,SD 卡,照相机,蓝牙等等,全部app权限在安装时授予优化
前面内容包含了关于app如何存在于系统内部的基础知识,剩下的内容给你介绍
定义app核心框架组件
在app的Manifest文件中声明组件与设备功能。
资源是独立于应用程序代码的,让你的应用程序,以优雅地行为为各类设备优化配置。
app组件:
app组件是全部app的基本要素,每个组件都是系统进入app的不一样经过点,对于用户来讲,并非每个组件都是app真正的入口点,一些组件取决于他们本身。每个组件都以他们的实体存在,他们各自都有独特的功能,扮演着特殊的角色。每个都是一个能够帮助肯定您的应用程序的总体。
一共有四种不一样类型的组件,每一个类型都服务于不一样用途,而且有他们独特的如何被建立与销毁的生命周期。
Activities:
activity表示一种用户界面的屏幕,例如:一个e-mail app也许会有一个activity显示接收到的新e-mail列表,另外一个activity写e-mail,还有一个activity读e-mail。尽管在e-mail app中全部activity一块儿工做造成有力的用户体验,可是每个activity对于其余activity来讲式独立的。一样的,一个app在另外一个app容许后,能够启动另外一个app的activity。例如,一个照相机app为了给其余用户分享照片能够启动e-mail app里的activity来写邮件。
一个activity实现了Activity的子类
Services:
service是一个在后台运行的组件,他能够执行长时间运行的操做,或者跨进程执行操做。一个service不会提供用户界面。例如,一个service能够在后台播放音乐直到用户使用另外一个不一样的app,或者service能够获取数据但并不会阻塞用户和界面交互。另外一个组件,例如activity,为了和service互,activity能够启动一个service并让他运行或者将service与activity绑定在一块儿。
一个service实现了Service类的子类。
Content Providers:
content providers管理一套可分享的app数据,你能够在网络上,或者其余的持久稳固你的app能够存储的位置,经过文件系统建立数据和SQLite数据库。经过Content Providers,其余的app能够查询数据,甚至在Content providers容许的状况下修改数据。例如,android系统提供content provider管理链接信息。在适当的容许下,一个app能够查询content provider的数据(例如ContactsContract.Data
)来读取或者写入有关我的说明的信息。
content providers 在读取或者是写入数据方面是有用的。这些数据对于你的app是私有的,不能分享的 。
content providers实现了ContentProvider的子类。而且为了使app操做事务,必须实现了标准的API集合。
Broadcast receivers:
broadcast receivers是一个响应全系统广播公告的组件。一些广播是由系统发布的,好比屏幕关闭,电量低,图片被捕获。app也能够发布广播,好比,让其余app知道数据已经被下载在设备上而且其余app可使用这些有效的数据。尽管broadcast receivers并不显示用户界面,可是他们能够建立一个状态栏通知,当广播事件发生时能够提醒用户。更常见的是,对其余组件来讲broadcast receivers仅仅是一个网关,而且broadcast只打算作少许的工做。好比,启动一个service执行这个事件最基本的工做。
broadcast receivers实现了Broadcast receiver子类,而且每个广播都提供intent类。
android系统设计特殊的一方面就是一些app能够启动其余app的组件。例如,若是你想用设备照相机捕获一张照片,也许有另一个app实现了这个功能,你的app能够直接使用它,而不是你本身开发一个activity去实现捕获照片。你并不须要从照相机app中链接代码,你仅仅须要启动照相机app中的activity捕获照片。当完成后,图片能够返回给app供你使用。对于用户来讲,照相机彷佛是你app的一部分。
当系统启动一个组件时,启动一个组件所须要的此app的进程以及实例化一个类。例如,若是你的app启动照相机app中捕获照片的activity,属于照相机app的activity在进程中运行,而不是在你的app进程中运行。所以,和大部分其余系统的app不一样,android app并无惟一的一个入口(例如,没有main()方法)
因为每一个应用程序运行在独立于其它应用程序文件权限的系统中,你的应用程序不能直接从另外一个程序激活一个组件,可是android系统能够。所以为了在另外一个android系统中激活组件,你经过发送一个信息给系统来指定你的intent启动另外一个app,而后系统给你激活一个组件。
翻译自android 官网API Guide。