Android 应用程序模块详解
在大多数操作系统里,存在独立的一个
1 对 1 的可执行文件(如 Windows 里的 exe 文
件),
它可以产生进程,并能和界面图标、应用进行用户交互。但在 Android 里,这是不固
定的,理解将这些分散的部分如何进行组合是非常重要的。
由于
Android 这种可灵活变通的,在实现一个应用不同部分时你需要理解一些基础技
术:
一个
android 包 (简称 .apk ) ,里面包含应用程序的代码以及资源。这是一个应用发布,
用户能下载并安装他们设备上的文件。
一个任务
,通常用户能当它为一个“应用程序”来启动:通常在桌面上会有一个图标可
以来启动任务,这是一个上层的应用,可以将你的任务切换到前台来。
一个进程
是一个底层的代码运行级别的核心进程。通常.apk 包里所有代码运行在一个
进程里,一个进程对于一个
.apk 包;然而, 进程 标签常用来改变代码运行的位置,可以是
全部的
.apk 包 或者是独立的 活动, 接收器, 服务, 或者 提供器组件。
任务
记住关键的一点:当用户看到的
“应用”,无论实际是如何处理的,它都是一个任务。如
果你仅仅通过一些活动来创建一个
.apk 包,其中有一个肯定是上层入口(通过动作的
intent-filter 以及分类 android.intent.category.LAUNCHER),然后你的.apk 包就创建了一个
单独任务,无论你启动哪个活动都会是这个任务的一部分。
一个任务,从使用者的观点,他是一个应用程序;对开发者来讲,它是贯穿活动着任
务的一个或者多个视图,或者一个活动栈。当设置
Intent.FLAG_ACTIVITY_NEW_TASK 标
志启动一个活动意图时,任务就被创建了;这个意图被用作任务的根用途,定义区分哪个
任务。如果活动启动时没有这个标记将被运行在同一个任务里(除非你的活动以特殊模式被
启动,这个后面会讨论)。如果你使用
FLAG_ACTIVITY_NEW_TASK 标记并且这个意图
的任务已经启动,任务将被切换到前台而不是重新加载。
FLAG_ACTIVITY_NEW_TASK 必须小心使用:在用户看来,一个新的应用程序由此
启动。如果这不是你期望的,你想要创建一个新的任务。另外,如果用户需要从桌面退出到
他原来的地方然后使用同样的意图打开一个新的任务,你需要使用新的任务标记。否则,如
果用户在你刚启动的任务里按桌面(
HOME)键,而不是退出(BACK)键,你的任务以
及任务的活动将被放在桌面程序的后面,没有办法再切换过去。
任务亲和力(
Affinities)