文档库 最新最全的文档下载
当前位置:文档库 › Android应用开发详细的入门介绍

Android应用开发详细的入门介绍

本文由liu19880204贡献
doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
?
Android 应用开发
是什么? 1. Android 是什么?
Android 是 Google 开发的基于 Linux 平台的开源手机操作系统。它包括操作系统、用 户界面和应用程序 —— 移动电话工作所需的全部软件, 而且不存在任何以往阻碍移动产业 创新的专有权障碍。谷歌与开放手机联盟合作开发了 Android,这个联盟由包括中国移动、 摩托罗拉、高通、宏达和 T-Mobile 在内的 30 多家技术和无线应用的领军企业组成。 Android 作为谷歌企业战略的重要组成部分,将进一步推进"随时随地为每个人提供信 息"这一企业目标的实现。 用什么语言开发的? 2. Android 用什么语言开发的? Android 的 SDK(software development kit)是 Java 的,将来可能有其他语言版本。 SDK 下载地址:https://www.wendangku.net/doc/3d586601.html,/android/download.html 模拟器是用什么开发的? 3. Android 模拟器是用什么开发的? Android 的核心是 Java 虚拟机,为了高效,目前来看,google 是不会支持其它语言的 开发的。不过,android 的模拟器是用 qeum 开发的,它的镜像文件分成 4 部分放在 tools 目录下,如果我们将 qeum 修改一下,说不定能玩一下它的 linux 系统。 4. 怎么进行 Android 开发? 开发? Android 支持在模拟器上运行和调试应用软件,有兴趣的朋友可以下载他的 SDK (software development kit)来了解 android 的界面;然后应该学习 android 的基本框架 和应用程序的构成;最后就可以试着在 sdk 的 API Demo 的基础上开发自己的 application 了。 希望刚刚了解软件开发的朋友不要着急,一步一个脚印,一定会茁壮成长,开发优秀的 application 的。 学习者用的呢? 5. 有哪些好的网络资源可供 Android 学习者用的呢? 首先,最好的最基本的学习资料无疑是 SDK 的文档了,也就是这个地方 (https://www.wendangku.net/doc/3d586601.html,/intl/zh-CN/android/documentation.html) 的介绍, 它循序渐 进的介绍了 Android 的各个方面。
其次,大家可能有对 android 文档不太理解的地方,或者自己的想法等等,完全可以通过下 面的 groups 进行咨询和交流:
◆Android Beginner ◆Developper Groups ◆Android Internals ◆Android Porting
https://www.wendangku.net/doc/3d586601.html,/group/android-beginners?lnk= https://www.wendangku.net/doc/3d586601.html,/group/android-developers https://www.wendangku.net/doc/3d586601.html,/group/android-internals?lnk= https://www.wendangku.net/doc/3d586601.html,/group/android-porting?lnk=
Android 开发环境配置简介
写这个系列的原因也是因为自己对 android 比较感兴趣, 而网上多数教程都是直接参照 官方翻译,并且翻译质量也不是很好,因为有些东西看去还真是英文能理解,中文翻译的反 而不伦

不类。 我不是说我英文水平有多好, 所以我也不会去做翻译, 我只会把我学习进度过程做记录, 和大家一起分享。 那我就从最基本的说起,环境配置。 一、Android 开发环境配置 1.1Android 开发环境需求 1.1.1 操作系统 目前只支持 XP(32-bit)、Vista(32/64-bit)、Mac OS X 10.4.8 或更新版本(x86)、 Linux(只在 Linux Ubuntu Dapper Drake 上面做过测试)。 我的笔记也只是按照本人的系统 XP sp2/sp3 32bit 来做讲解,其他系统的朋友可以 google 一下差异,反正都大同小异的。 1.1.2 Android 开发环境 无论是官方还是我本人,都建议使用 eclipse 进行开发,当然,eclipse 版本要在 3.3 以上,这是官方说法,3.3 以下我也没测过,3.3 (Europa)、3.4 (Ganymede) 都可以,java 版本或者 EE 版本也都没问题的,可以到 eclipse 官方下载最新版本。 因为开发是基于 java 的,所以 jdk 是少不了的,jdk 要求是 5.0 或者 6.0,我还是用 5.0 比较多,可以到 sun 官方下载。 如果不用 eclipse,也可以直接使用 ant 来构建,那当然就需要 ant 了,ant 的配置我 顺带一提,一般用 ant 的人都已懂得,而新手都不会用它,肯定用 eclipse 了,呵呵。 1.2 Android 开发环境变量配置
1.2.1 jdk 的配置 已经配置好的请飘过……高手飘过…… 新手请跟进。 首先到 sun 官方下载 jdk, 注意是 jdk 而不是 jre, 因为 jre 是提供 java 运行环境而不 是开发环境哟。sun 官方 https://www.wendangku.net/doc/3d586601.html, 下载后安装或者有些朋友是下的解压包那就解压到某目录,例如我是 C:\Program Files\Java\jdk1.5.0_14 右击 我的电脑 -> 属性 -> 高级, 点击下面的 环境变量,在下面的“系统变量”处 选择新建 在变量名处输入 JAVA_HOME ,变量值中输入刚才的目录,比如我的就是 C:\Program Files\Java\jdk1.5.0_14 ,确定后再新建一个变量名为 classpath,变量值 为 .;%JAVA_HOME%/lib/rt.jar;%JAVA_HOME%/lib/tools.jar , 确定后找到 PATH 的变量, 双击或点击编辑,在变量值最前面加上%JAVA_HOME%/bin; 注意里面的;哦。确定、确定、确 定后即可 然后开始 - 运行 cmd,输入 java 或者 javac 看看有没有效果,如果出来一大堆东东, 那就 ok 了,如果出现类似 xxx 不是内部或外部命令之类的那就说明设置有问题,看看那里 出问题啦。 1.2.2 eclipse 下载安装 到 eclipse 官方下载最新版本, https://www.wendangku.net/doc/3d586601.html,/downloads/ 我刚才下了最新 的 189M 的那个 eclipse-jee-galileo-win32.zip 大家可以自己选择下载, 下载后解压即可 运行。不用其他特殊配置“暂时”。 1.2.3 sdk 的配置 因为我们要开发的 android 应用程序,所以下的 sdk 是 Google 那里下载,地址在 https://www.wendangku.net/doc/3d586601.html,/sdk/1.5_r3/index.html 以后更新后估计地址会变,所以 大家可以从 http://developer.an

https://www.wendangku.net/doc/3d586601.html,/index.html 进入 android 主页, 然后点击 sdk 就到了这个下载页面,我是 XP,当然下载了第一个 Windows 的版本。下载后解压到一个目 录, 如我的是 D:\SDK\android-sdk-windows-1.5_r3\android-sdk-windows-1.5_r3 然后同 样要设置环境变量,同 jdk 设置,新建一个 SDK_HOME,值为 D:\SDK\android-sdk-windows-1.5_r3\android-sdk-windows-1.5_r3 ,然后找到 path,在 前面加上%SDK_HOME%\tools; 就 OK 了。 和 jdk 一样,我们也可以测试一下环境变量是否设置成功,cmd 窗口中输入 android, 出现一堆东西,OK 完成。
1.2.4 ant 的配置 用 eclipse 开发基本就用不到了。但是有些“高手”就是喜欢,呵呵,ant 是 apache 的东西,所以去 https://www.wendangku.net/doc/3d586601.html, 下载吧,down 回来后解压,配置环境变量 ANT_HOME = 解 压路径 path 中添加 %ANT_HOME%/bin; 同样,测试一下,cmd 中输入 ant,出现 build.xml 不存在类似的提示就 OK 了。 1.3 eclipse 设置 当然,以上都搞定后,还不能马上用 eclipse 开发 android 应用程序,还必须添加 eclipse 插件才行,幸好这步骤非常轻松,打开 eclipse 后,点击菜单栏的 help -> install new software…… 然后点击 Add 会出来一个 Add Site 的窗口,这里 Name 输入 android(自 己取个就是了),location 中输入插件的网络地址: https://https://www.wendangku.net/doc/3d586601.html,/android/eclipse/ 然后就等待连接了, 然后 install, 把"Android DDMS" 和 "Android Development Tools" 都选中,finish 就可以了,可能有段时间会去计算插件占用资源情况,慢慢等会。完成后 会提示重启 eclipse 来加载插件,ok 重启,就可以用了。 开发环境配置最终步骤…… 1.4 Android 开发环境配置最终步骤…… 为什么要有这个步骤,是因为我跑 example 的时候总出现“Failed to find an AVD compatible with target”,所以这里写一下该步骤以提醒大家。 avd 必须在运行实例前创建好,可以直接在 cmd 中输入 android list,会列出可以创 建 avd 的几个 api,我这里有 id1 id2 id3 分别对应 sdk1.1 sdk1.5 GoogleAPIs。 然后大家运行 android create --name myname(自己取个,英文的呃) --target 3(如 果要用 sdk1.5 就输入 2,1.1 就用 1) 创建好后就完成了终极步骤…… 到此,大家可以去 eclipse 里面 new 一个 android 工程,然后直接在工程上点右键 run --run android 了,只不过模拟器开机时间有点长,害我一开始以为失败了,一直停留在 android 字样上,其实那是在开机…… 然后大家自己先玩玩,过把瘾,买不起手机,过模 拟器的瘾…… 补充一下,在 eclipse 建立 android 项目前,需要在 eclipse 中配置 sdk 目录,注意不 是 tools 目录哦。方法:window -- preferences -- android 然后在 SDK location 中输入 sdk 目录地址或者点击 browse 定位到 sdk 目录即可,然后 apply,ok 就完

成了
详解 Android 源码的编译
本文将为大家介绍的是如何设置 Android 源码的编译环境, 包括 Linux 下的配置。 主要 基于 Android 1.0 环境,希望对大家了解 Android 开发有所帮助。 本次编译过程主要参考官方文档(https://www.wendangku.net/doc/3d586601.html,/download)和网上相关 资料(如 https://www.wendangku.net/doc/3d586601.html,/liaoshengjiong/archive/2009/03/04/3957749.aspx) 编译环境:Ubuntu8.10 1、安装一些环境
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. sudo apt-get install git-core gnupg sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxg tk2.6-dev build-essential zip curl 13. 14. 15. 16. sudo apt-get install ncurses-dev sudo apt-get install zlib1g-dev sudo apt-get install valgrind sudo apt-get install python2.5 sudo apt-get install patch sudo apt-get install texinfo sudo apt-get install libncurses-dev sudo apt-get install build-essential sudo apt-get install make sudo apt-get install gcc sudo apt-get install g++ sudo apt-get install libc6-dev
安装 java 环境
17. sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts sun-java6-jdk
注: 官方文档说如果用 sun-java6-jdk 可出问题, 得要用 sun-java5-jdk。 经测试发现, 如果仅仅 make(make 不包括 make sdk),用 sun-java6-jdk 是没有问题的。而 make sdk, 就会有问题,严格来说是在 make doc 出问题,它需要的 javadoc 版本为 1.5。 因此,我们安装完 sun-java6-jdk 后最好再安装 sun-java5-jdk,或者只安装 sun-java5-jdk。这里 sun-java6-jdk 和 sun-java5-jdk 都安装,并只修改 javadoc.1.gz
和 javadoc。因为只有这两个是 make sdk 用到的。这样的话,除了 javadoc 工具是用 1.5 版本,其它均用 1.6 版本:
18. sudo apt-get install sun-java5-jdk
修改 javadoc 的 link
19. 20. 21. cd /etc/alternatives sudo rm javadoc.1.gz sudo ln -s /usr/lib/jvm/java-1.5.0-sun/man/man1/javadoc.1.gz javadoc .1.gz 22. 23. sudo rm javadoc sudo ln -s /usr/lib/jvm/java-1.5.0-sun/bin/javadoc javadoc
2、设置环境变量
24. vim ~/.bashrc
在.bashrc 中新增或整合 PATH 变量,如下
25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. #java 程序开发/运行的一些环境变量 JAVA_HOME=/usr/lib/jvm/java-6-sun JRE_HOME=${JAVA_HOME}/jre export Android_JAVA_HOME=$JAVA_HOME export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATH export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin export JAVA_HOME; export JRE_HOME; export CLASSPATH; HOME_BIN=~/bin/ export PATH=${PATH}:${JAVA_PATH}:${JRE_PATH}:${HOME_BIN}; #echo $PATH;
最后,同步这些变化:
37. source ~/.bashrc
repo( 源码) 3、安装 repo(用来更新 Android 源码) 创建~/bin 目录,用来存放 repo 程序,如下:
38. 39. $ cd ~ $ mkdir bin
并加到环境变量 PATH 中,在第 2 步中已经加入
下载 repo 脚本并使其可执行:
40. 41. $ curl http://Android.git.ker

https://www.wendangku.net/doc/3d586601.html,/repo >~/bin/repo $ chmod a+x ~/bin/repo
4、下载 Android 源码并更新之 建议不要用 repo 来下载(Android 源码超过 1G,非常慢),直接在网上下载 https://www.wendangku.net/doc/3d586601.html,/bbs/pub/cupcake.tar.gz。而且解压出来的 cupcake 下也 有.repo 文件夹,可以通过 repo sync 来更新 cupcake 代码:
42. tar -xvf cupcake.tar.gz
repo sync(更新很慢,用了 3 个小时) 源码,并得到~/project/Android/cupcake/out 5、编译 Android 源码,并得到~/project/Android/cupcake/out 目录 进入 Android 源码目录: make 这一过程很久(2 个多小时) 6、在模拟器上运行编译好 Android Android SDK 的 emulator 程序在 Android-sdk-linux_x86-1.0_r2/tools/下, emulator 是需要加载一些 image 的,默认加载 Android-sdk-linux_x86-1.0_r2/tools/lib/images 下的 kernel-qemu(内核) ramdisk.img system.img 编译好 Android 之后,emulator 在 ~/project/Android/cupcake/out/host/linux-x86/bin 下, ramdisk.img system.img userdata.img 则在 userdata.img
~/project/Android/cupcake/out/target/product/generic 下 cd ~/project/Android/cupcake/out/host/linux-x86/bin 增加环境变量
43. vim ~/.bashrc
在.bashrc 中新增环境变量,如下
44. 45. #java 程序开发/运行的一些环境变量 export Android_PRODUCT_OUT=~/project/Android/cupcake2/out/target/pro duct/generic
46.
Android_PRODUCT_OUT_BIN=~/project/Android/cupcake2/out/host/linux-x8 6/bin
47.
export PATH=${PATH}:${Android_PRODUCT_OUT_BIN};
最后,同步这些变化:
48. 49. source ~/.bashrc emulator -image system.img -data userdata.img -ramdisk ramdisk.img
最后进入 Android 桌面,就说明成功了。 out/host/linux-x86/bin 下生成许多有用工具 (包括 Android SDK/tools 的所有工具), 因此,可以把 eclipse 中 Android SDK 的路径指定到 out/host/linux-x86/bin 进行开发 7、编译 linux kernel 直接 make Android 源码时,并没有 make linux kernel。因此是在运行模拟器,所以 不用编译 linux kernel。如果要移值 Android,或增删驱动,则需要编译 linux kernel linux kernel 的编译将在以后的文章中介绍。 8、编译模块 Android 中的一个应用程序可以单独编译,编译后要重新生成 system.img 在源码目录下执行
50. . build/envsetup.sh (.后面有空格)
就多出一些命令:
51. 52. 53. 54. 55. 56. 57. 58. - croot: - m: - mm: - mmm: - cgrep: - jgrep: Changes directory to the top of the tree. Makes from the top of the tree. Builds all of the modules in the current directory. Builds all of the modules in the supplied directories. Greps on all local C/C++ files. Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files. - godir: Go to the directory containing a file.
可以加—help 查看用法 我们可以使用 mmm 来编译指定目录的模块,如编译联系人:
59. mmm packages/apps/Contacts/

编完之后生成两个文件:
60. 61.
out/target/product/generic/data/app/ContactsTests.apk out/target/product/generic/system/app/ Contacts.apk Google CEO 谈 Android 和 Chrome OS 操作系统 开发商担心 Android 发展速度过快 谷歌创始人布林:Chrome OS 与 Android 将.. Android 占领 2010 的六大理由 开发人员的怨念:Android 开发应用像噩梦
o o o o o
可以使用 make snod 重新生成 system.img 再运行模拟器 9、编译 SDK 直接执行 make 是不包括 make sdk 的。make sdk 用来生成 SDK,这样,我们就可以用与 源码同步的 SDK 来开发 Android 了。 1)修改/frameworks/base/include/utils/Asset.h ‘UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024’ 改为 ‘UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024’ 原因是 Eclipse 编译工程需要大于 1.3M 的 buffer 2)编译 ADT。 注意,我们是先执行 2),再执行 3)。因为在执行./build_server.sh 时,会把生成的 SDK 清除了。 用上了新的源码,adt 这个调试工具也得自己来生成,步骤如下: 进入 cupcake 源码的 development/tools/eclipse/scripts 目录,执行: export ECLIPSE_HOME=你的 eclipse 路径 ./build_server.sh 你想放 ADT 的路径 3)执行 make sdk。 注意, 这里需要的 javadoc 版本为 1.5, 所以你需要在步骤 1 中同时安装 sun-java5-jdk make sdk 编译很慢。编译后生成的 SDK 存放在 out/host/linux-x86/sdk/,此目录下有 Android-sdk_eng.xxx_linux-x86.zip 和 Android-sdk_eng.xxx_linux-x86 目录。 Android-sdk_eng.xxx_linux-x86 就是 SDK 目录
实际上,当用 mmm 命令编译模块时,一样会把 SDK 的输出文件清除,因此,最好把 Android-sdk_eng.xxx_linux-x86 移出来 4)关于环境变量、 4)关于环境变量、Android 工具的选择 关于环境变量 目前的 Android 工具有: A、 我们从网上下载的 SDK tools 下有许多 Android 工具, ( lib/images 下有 img 映像) B、我们用 make sdk 编译出来的 SDK( tools 下也有许多 Android 工具,lib/images 下有 img 映像) C、我们用 make 编译出来的 out 目录( tools 下也有许多 Android 工具,lib/images 下有 img 映像) 那么我们应该用那些工具和 img 呢? 首先,我们不会用 A 选项的工具和 img,因为一般来说它比较旧,也源码不同步。测试 发现,如果使用 B 选项的工具和 img,Android 模拟器窗口变小(可能是 skin 加载不了), 而用 C 选项的工具和 img 则不会有此问题。 有些 Android 工具依赖 Android.jar(比如 Android),因此,我们在 eclipse 中使用 B 选项的工具(SDK),使用 C 选项的 img。其实,从 emulator -help-build-images 也可以看 出,Android_PRODUCT_OUT 是指向 C 选项的 img 目录的 不过,除了用 A 选项的工具和 img,用 B 或 C 的模拟器都不能加载 sdcard,原因还不清 楚。 5)安装、 5)安装、配置 ADT 安装 安装、配置 ADT 请参考官方文档 6)创建

Android Virtual Device 编译出来的 SDK 是没有 AVD(Android Virtual Device)的,我们可以通过 Android 工 具查看: Android list 输出为:
67. 68. 69. 70. 71. Available Android targets: [1] Android 1.5 API level: 3 Skins: HVGA-P, QVGA-L, HVGA-L, HVGA (default), QVGA-P Available Android Virtual Devices:
表明没有 AVD。如果没有 AVD,eclipse 编译工程时会出错(Failed to find a AVD compatible with target 'Android 1.5'. Launch aborted.) 创建 AVD: Android create avd -t 1 -c ~/sdcard.img -n myavd 可以 Android –help 来查看上面命令选项的用法。创建中有一些选项,默认就行了 再执行 Android list,可以看到 AVD 存放的位置 以后每次运行 emulator 都要加-avd myavd 或@myavd 选项,这里 eclipse 才会在你打开 的 emulator 中调试程序 注意: 注意: 这样,SDK 和 ADT 就生成了,就按照官方文档把他们整合到 Eclipse,这里不再细说了。 建个 Android 的新工程,试试你自己编译的 sdk。
Android 应用程序模块详解
在大多数操作系统里, 存在独立的一个 1 对 1 的可执行文件 (如 Windows 里的 exe 文件) , 它可以产生进程,并能和界面图标、应用进行用户交互。但在 Android 里,这是不固定的, 理解将这些分散的部分如何进行组合是非常重要的。 由于 Android 这种可灵活变通的,在实现一个应用不同部分时你需要理解一些基础技 术: 一个 android 包 (简称 .apk ) ,里面包含应用程序的代码以及资源。这是一个应用 发布,用户能下载并安装他们设备上的文件。 一个任务 ,通常用户能当它为一个“应用程序”来启动:通常在桌面上会有一个图标 可以来启动任务,这是一个上层的应用,可以将你的任务切换到前台来。 一个进程 是一个底层的代码运行级别的核心进程。 通常.apk 包里所有代码运行在一个 进程里,一个进程对于一个.apk 包;然而, 进程 标签常用来改变代码运行的位置,可以是 全部的.apk 包 或者是独立的 活动, 接收器, 服务, 或者 提供器组件。 任务 记住关键的一点:当用户看到的“应用”,无论实际是如何处理的,它都是一个任务。 如果你仅仅通过一些活动来创建一个.apk 包,其中有一个肯定是上层入口(通过动作的
intent-filter 以及分类 https://www.wendangku.net/doc/3d586601.html,UNCHER),然后你的.apk 包就创建 了一个单独任务,无论你启动哪个活动都会是这个任务的一部分。 一个任务,从使用者的观点,他是一个应用程序;对开发者来讲,它是贯穿活动着任务 的一个或者多个视图, 或者一个活动栈。 当设置 Intent.FLAG_ACTIVITY_NEW_TASK 标志启动 一个活动意图时,任务就被创建了;这个意图被用作任务的根用途,定义区分哪个任务。如 果活动启动时没有这个标记

将被运行在同一个任务里 (除非你的活动以特殊模式被启动, 这 个后面会讨论) 如果你使用 FLAG_ACTIVITY_NEW_TASK 标记并且这个意图的任务已经启动, 。 任务将被切换到前台而不是重新加载。 FLAG_ACTIVITY_NEW_TASK 必须小心使用:在用户看来,一个新的应用程序由此启动。 如果这不是你期望的,你想要创建一个新的任务。另外,如果用户需要从桌面退出到他原来 的地方然后使用同样的意图打开一个新的任务,你需要使用新的任务标记。否则,如果用户 在你刚启动的任务里按桌面(HOME)键,而不是退出(BACK)键,你的任务以及任务的活动 将被放在桌面程序的后面,没有办法再切换过去。 任务亲和力(Affinities) 任务亲和力(Affinities) 一些情况下 Android 需要知道哪个任务的活动附属于一个特殊的任务, 即使该任务还没 有被启动。 这通过任务亲和力来完成, 它为任务中一个或多个可能要运行的活动提供一个独 一无二的静态名字。默认为活动命名的任务亲和力的名字,就是实现该活动.apk 包的名字。 这提供一种通用的特性,对用户来说,所有在.apk 包里的活动都是单一应用的一部分。 当不带 Intent.FLAG_ACTIVITY_NEW_TASK 标记启动一个新的活动,任务亲和力对新启 动的活动将没有影响作用: 它将一直运行在它启动的那个任务里。 然而, 如果使用 NEW_TASK 标记,亲和力会检测已经存在的任务是否具有相同的亲和力。如果是,该任务会被切换到前 台,新的活动会在任务的最上面被启动。 你可以在你的表现文件里的应用程序标签里为.apk 包里所有的活动设置你自己的任务 亲和力,当然也可以为单独的活动设置标签。这里有些例子演示如何使用: 如果你的.apk 包里包含多个用户可启动的上层应用程序,那么你可能想要为每个活动 分配不同的亲和力。 这里有一个不错的协定, 你可以将不同的名字字串加上冒号附加在.apk 包名字的后面 。 例如,"com.android.contacts"的亲和力命名可以是 "com.android.contacts:Dialer" and "com.android.contacts:ContactsList"。 如果你想替换一个通知,快捷键,或者其它能从外部启动的应用程序的内部活动,你需 要在你想替换的活动里明确的设置任务亲和力(taskAffinity)。 例如, 如果你想替换联系人 详细信息浏览界面(用户可以直接操作或者通过快捷方式调用),你需要设置任务亲和力 (taskAffinity)为“com.android.contacts”。
启动模式以及启动标记 你控制活动和任务通信的最主要的方法是通过设置启动模式的属性以及意图相应的标 记。这两个参数能以不同的组合来共同控制活动的启动结果,这在相应的文档里有描述。这 里我们只描述一些通

用的用法以及几种不同的组合方式。 你最通常使用的模式是 singleTop(除了默认为 standard 模式)。这不会对任务产生 什么影响;仅仅是防止在栈顶多次启动同一个活动。 singleTask 模式对任务有一些影响:它能使得活动总是在新的任务里被打开(或者将 已经打开的任务切换到前台来) 使用这个模式需要加倍小心该进程是如何和系统其他部分 。 交互的,它可能影响所有的活动。这个模式最好被用于应用程序入口活动的标记中。 (支持 MAIN 活动和 LAUNCHER 分类)。 singleInstance 启动模式更加特殊,该模式只能当整个应用只有一个活动时使用。 有一种情况你会经常遇到,其它实体(如搜索管理器 SearchManager 或者 通知管理器 NotificationManager)会启动你的活动。这种情况下,你需要使用 Intent.FLAG_ACTIVITY_NEW_TASK 标记,因为活动在任务(这个应用/任务还没有被启动) 之外被启动。就像之前描述的一样, 这种情况下标准特性就是当前和任务和新的活动的亲 和性匹配的任务将会切换到前台,然后在最顶端启动一个新的活动。当然,你也可以实现其 它类型的特性。 一个常用的做法就是将 Intent.FLAG_ACTIVITY_CLEAR_TOP 和 NEW_TASK 一起使用。这 样做, 如果你的任务已经处于运行中, 任务将会被切换到前台来, 在栈里的所有的活动除了 根活动,都将被清空,根活动的 onNewIntent(Intent) 方法传入意图参数后被调用。当使 用这种方法的时候 singleTop 或者 singleTask 启动模式经常被使用,这样当前实例会被 置入一个新的意图,而不是销毁原先的任务然后启动一个新的实例。 另外你可以使用的一个方法是设置活动的任务亲和力为空字串(表示没有亲和力),然 后设置 finishOnBackground 属性。 如果你想让用户给你提供一个单独的活动描述的通知, 倒不如返回到应用的任务里, 这个比较管用。 要指定这个属性, 不管用户使用 BACK 还是 HOME, 活动都会结束;如果这个属性没有指定,按 HOME 键将会导致活动以及任务还留在系统里, 并且没有办法返回到该任务里。 进程 在 Android 中,进程是应用程序的完整实现,而不是用户通常了解的那样。他们主要用 途很简单: ◆提高稳定性和安全性,将不信任或者不稳定的代码移动到其他进程。 ◆可将多个.apk 包运行在同一个进程里减少系统开销。
◆帮助系统管理资源, 将重要的代码放在一个单独的进程里, 这样就可以单独销毁应用程序 的其他部分。 像前面描述的一样, 进程的属性被用来控制那些有特殊应用组件运行的进程。 注意这个 属性不能违反系统安全: 如果两个.apk 包不能共享同一个用户 ID, 却试图运行在通一个进 程里,

这种情况是不被允许的,事实上系统将会创建两个不同的进程。 线程 每个进程包含一个或多个线程。多数情况下,Android 避免在进程里创建多余的线程, 除非它创建它自己的线程,我们应保持应用程序的单线程性。 一个重要的结论就是所有呼 叫实例, 广播接收器, 以及 服务的实例都是由这个进程
里运行的主线程创建的。 注意新的线程不是为活动,广播接收器,服务或者内容提供器实例创建:这些应用程序 的组件在进程里被实例化 (除非另有说明, 都在同一个进程处理) 实际上是进程的主线程。 , 这说明当系统调用时这些组件(包括服务)不需要进程远距离或者封锁操作(就像网络呼叫 或者计算循环),因为这将阻止进程中的所有其他组件。你可以使用标准的线程 类或者 Android 的 HandlerThread 类去对其它线程执行远程操作。 这里有一些关于创建线程规则的例外: 呼叫 IBinder 或者 IBinder 实现的接口, 如果该呼叫来自其他进程, 你可以通过线程发 送的 IBinder 或者本地进程中的线程池呼叫它们, 从进程的主线程呼叫是不可以的。 特殊情 况下,,呼叫一个服务 的 IBinder 可以这样处理。 (虽然在服务里呼叫方法在主线程里已经 完成。)这意味着 IBinder 接口的实现必须要有一种线程安全的方法,这样任意线程才能同 时访问它。 呼叫由正在被调用的线程或者主线程以及 IBinder 派发的内容提供器 的主方法。被指 定的方法在内容提供器的类里有记录。这意味着实现这些方法必须要有一种线程安全的模 式,这样任意其它线程同时可以访问它。 呼叫视图以及由视图里正在运行的线程组成的子类。 通常情况下, 这会被作为进程的主 线程,如果你创建一个线程并显示一个窗口,那么继承的窗口视图将从那个线程里启动。

1

相关文档
相关文档 最新文档