Android 应用程序以java作为编程语言。Android SDK工具把代码连同数据、资源文件一起编译成一个以.apk为后缀(suffix)的android 程序存档(archive)文件包。在一个单独的.apk文件中的所有代码被认为是一个应用程序,android 设备就是用.apk文件来安装应用的。

  一旦在设备上安装了应用,应用程序就会驻留在它自己的安全沙箱中:

  • android 操作系统是一个多用户linux系统,在这个系统中运行的每一个应用程序都是一个不同的用户。
  • android系统默认为每一个应用程序分配一个独一无二的用户ID(这个用户ID仅仅被系统使用,应用程序并不知道用户ID),系统为应用程序的所有文件分配权限,以使系统分配给应用程序的用户ID能访问他们。
  • 每一个进程有它自己的虚拟机(VM),因此一个应用程序的代码是和其它程序孤立(isolation)的运行的。
  • 默认情况下,每一个应用程序运行在它自己的linux进程中,当应用程序的任何一部件是,android 就开始一个进程,当不需要或者系统必须为其它应用程序回收内存时结束进程。

  android系统实现了最小特权原理。也就是说,每一个应用程序默认只能访问它工作需要访问的组件,没有更多。这就创建了一个应用程序不能访问系统中其他没有权限的部分的安全环境。

  然而应用程序有许多方法和其他应用程序共享数据和访问系统服务:

  • 我们可以为两个应用程序分配一个共享的linux用户ID,这样他们就可以访问彼此的文件。为了保持资源,拥有相同用户ID的应用程序也可以运行在相同的linux进程中共享相同的虚拟机(VM),应用程序必须有相同的证书(certificate)签名。
  • 应用程序也可以请求访问设备数据的权限,如:用户联系人、短信息、SD卡、照相机、蓝牙等等,所有的权限必须在应用程序被用户安装时授权。

  上面基本包含了关于(regarding)一个应用程序如何在系统中存在,下面将向你介绍:

  • 定义应用程序的核心框架
  • 为应用程序生命组件和需要的设备特征的清单文件
  • 和程序代码分开的资源和允许应用程序为各种设备配置优雅的(gracefully)优化它的行为

应用程序组件

  应用程序组件是应用程序的基本(essential)模块。每一个组件就是系统进入应用程序的不同入口点。事实上对于用户来说,并不是每一个组件都是一个入口点,有些组件相互依赖,但是,每一个组件作为它自己的实体存在并起到特殊的作用,每一个组件都是帮助你定义你的应用程序的整个行为的独一无二的部分。

  有四种不同的应用程序组件类型。每一个类型提供一个独特的目的和一个定义应用程序如何创建和销毁的独特的生命周期。

  下面是这四种应用程序组件的介绍:

Activities

  一个Activity代表一个拥有用户接口的屏幕。举个例子,一个邮件程序可能有一个展示新邮件的列表Activity,一个编写(compose)邮件的Activity,和一个浏览邮件的Activity。在这个邮件程序中尽管这些Activity一起运行形成了粘性(cohesive)的用户体验,每一个Activity又是相互独立的。同样的(As such),如果这个程序允许的话,其他应用程序也可以开始任何一个Activity。举个例子,一个照相机程序可以开始邮件程序的一个Activity写一封新邮件,来分享照片。一个Activity被Activity的子类实现,更多知识请看Activities开发向导。

Services

  待续......

一、Android应用程序的基本原理(Fundamentals [,fʌndə'mentlz])的更多相关文章

  1. 【苦读官方文档】2.Android应用程序基本原理概述

    官方文档原文地址 应用程序原理 Android应用程序是通过Java编程语言来写.Android软件开发工具把你的代码和其它数据.资源文件一起编译.打包成一个APK文件,这个文档以.apk为后缀,保存 ...

  2. Android核心分析之二十Android应用程序框架之无边界设计意图

    Android应用程序框架1 无边界设计理念 Android的应用框架的外特性空间的描述在SDK文档(http://androidappdocs.appspot.com/guide/topics/fu ...

  3. 【转】android应用程序签名

    概述 Android系统要求,所有的程序经过数字签名后才能安装.Android系统使用这个证书来识别应用程序的作者,并且建立程序间的信任关系.证书不是用于用户控制哪些程序可以安装.证书不需要授权中心来 ...

  4. Android应用程序开发之图片操作(一)——Bitmap,surfaceview,imageview,Canvas

    Android应用程序开发之图片操作(一)——Bitmap,surfaceview,imageview,Canvas   1,Bitmap对象的获取 首先说一下Bitmap,Bitmap是Androi ...

  5. 解开Android应用程序组件Activity的"singleTask"之谜

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6714543 在Android应用程序中,可以配 ...

  6. Android应用程序内部启动Activity过程(startActivity)的源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6703247 上文介绍了Android应用程序的 ...

  7. Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/7932268 在前面一篇文章中,我们分析了And ...

  8. android小程序之幸运菜谱

    android小程序之幸运菜谱 前言:刚刚结束短短5天的android公开课程,收获不少,写下来记录一下吧!(因为学校校企公开课的缘故才偶然接触的android,所以只学了这几天,不喜勿喷) 一开始得 ...

  9. android应用程序签名(转)

    概述 Android系统要求,所有的程序经过数字签名后才能安装.Android系统使用这个证书来识别应用程序的作者,并且建立程序间的信任关系.证书不是用于用户控制哪些程序可以安装.证书不需要授权中心来 ...

随机推荐

  1. 指令式Callback,函数式Promise:对node.js的一声叹息

    原文:Callbacks are imperative, promises are functional: Node's biggest missed opportunity promises 天生就 ...

  2. js 生成随机数

    <script>   function GetRandomNum(Min,Max){   var Range = Max - Min;   var Rand = Math.random() ...

  3. HDU 5927 Auxiliary Set (dfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5927 题意: 给你一棵树,其中有一些'不重要'的点,要是这些'不重要'的点的子树中有两个重要的点的LC ...

  4. C:函数指针、回调函数

    函数指针 是一个指针,指向函数的指针,指针存放的都是地址,所以函数指针存放的是函数的地址.数组名就是数组的首地址,函数名就是函数的首地址.与数组类似. 代码demo int (*p) (int ,in ...

  5. application与cache

    每个项目都有一些全局,常用的信息,而这些信息如果在每次使用时都载入,那必将耗费很大的资源,特别是对访问压力大的系统.因此,这个情况中,把这些全局信息放到缓存中是很必要的,放在缓存中可以使得数据能够很快 ...

  6. javac 命令

    HelloWorld.java:1: 需要为 class.interface 或 enum 锘缝ublic class HelloWorld{ ^ 1 错误 这个错误出现的原因主要是在中文操作系统中, ...

  7. eclipse设置默认编码格式为UTF-8

    需要设置的几处地方为: Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 Window ...

  8. 检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败

    在项目中将数据导出为Excel格式时出现“检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070 ...

  9. Android中全局Application的onCreate多次调用问题

    String processName = OsUtils.getProcessName(this, android.os.Process.myPid()); if (processName != nu ...

  10. Qt中的 Size Hints 和 Size Policies

    sizeHint 这个属性所保存的 QSize 类型的值是一个被推荐给窗口或其它组件(为了方便下面统称为widget)的尺寸,也就是说一个 widget 该有多大,它的一个参考来源就是这个 sizeH ...