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. jBox使用方法

    1.引入jquery文件 2.引入css和jBox文件 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml& ...

  2. 关于select @@IDENTITY的初识

    这句话主要是得到唯一的主键,然后应用于下面的SQL语句 例如代码 StringBuilder strSql=new StringBuilder(); strSql.Append("inser ...

  3. VISIO 2007 修改形状默认字体 自定义模具

    visio 2007的形状的默认字体为8号,比较小,怎样改成默认10号? 首先将一个流程图中所要用的形状都拖到绘图区,然后全选,设置字体为10号,全选,再拖动到形状区,如下图: 点击‘是’,确认修改模 ...

  4. How Tomcat Works(十一)

    本文接下来分析tomcat的类载入器,tomcat需要实现一个自定义的载入器,而不能使用系统类载入器 (1)限制serlvet访问当前运行的java虚拟机中环境变量CLASSPATH指明的路径下的所有 ...

  5. How Tomcat Works(六)

    本文继续分析HttpProcessor类,该类实现了org.apache.catalina.Lifecycle接口和java.lang.Runnable接口 我们先分析它的构造函数 /** * The ...

  6. C# 使用ping命令

    方法一:调用cmd 的ping命令 private static string CmdPing(string strIp) { Process p = new Process(); p.StartIn ...

  7. 读写锁:ReadWriteLock

    http://my.oschina.net/20076678/blog/173165   一.在JDK文档中关于读写锁的相关说明 ReadWriteLock 维护了一对相关的 锁 ,一个用于只读操作, ...

  8. ASP.NET加载主题和皮肤样式的各种方式

    一.加载主题(皮肤.样式表)的多种方式 除了在页面指令中采用Theme或者StylesheetTheme为单个页面加载主题外,还可以通过配置文件为多个页面批量加载主题,另外,还可以通过改变页面的The ...

  9. SpringAOP 基础具体解释

    Spring AOP对于刚開始学习spring的同学来说有点难以理解.我刚工作的时候都没怎么理解,如今略微理解了一点,所以在这里我将用嘴简单的样例,最通俗易懂的话语来说出我的理解,可能因为我对Spri ...

  10. mongodb - 命令行增删改查

    # insert db.person.insert({ }) db.person.insert({ }) db.person.insert({ }) db.person.insert({ }) # s ...