Android reviews —— Activity(上)

     想想,已经从事android工作一年了,学习android也刚好满一年。

     当年初生牛犊之时,还拿着android 开发的书反反复复抄代码;不久之后,也就不再看书了,转而看SDK 文档,还着手翻译了几篇基础性的文章,那个年代还是2.3的年代;再而后参与项目,看SDK文档越来越少,几乎不懂的就网上baidu,抄别人的或者源码的代码。继而一年下来了,自己写的软件也不少了,但是总是觉得缺乏什么——是时候该总结总结了。

     如今,又重新打开android 的 SDK文档,现在已经是4.1的天下了,增加了不少东西,也把不少东西描述清楚了。回顾一下,继而把这些内容写成《Adnroid reviews系列》,和大家分享、共勉。

 

目录

(一)Android reviews —— Activity

 

(一)Android reviews —— Activity(上)

一、前言

     Android是一个组件概念的系统,它弱化了进程的概念,对用户看来,组件和组件之间的调用,似乎都在同一个进程下完成。但孰不知,所有组件通信几乎都被Binder这个Android跨进程机制进行了封装,整个Android系统都严格遵照着C/S架构良好的运行着——Client就是大部分的应用程序,而Server就是ActivityManagerService、WindowManagerService这样的东西。Client与Client之间的通信,都需要经过Server的同意才能够进行,Server掌握了Client的创建、活动、和销毁。对于这样一个系统,似乎一直都是当前系统架构的主流,管理集中、局部化封闭、执行效率低下、代码编写难度大就是此类系统的特点,而作为一个资历尚浅的代码民工,我很难评价这种系统的合理性,我只能遵照Android制定的游戏规则,来玩这场游戏。

     而在Android中,Activity是个什么东西呢?它被google称为android四大组件中最重要的组件(Activity、Service、BroadcastReceiver、ContentProvider),它又有怎么样的特性呢?而Activity 又被google定义为前台UI组件,最主要的任务就是显示UI,拿为什么Activity能显示UI,而其它组件不可以呢?接下来,我会把我一年以来的积累进行一次总结,疏漏和错误在所难免,而此该系列的定义也非什么教程,也仅仅是一次总结和分享,还望大家侃侃而谈。

二、Android应用从开发到运行

     每一个Android应用程序,对我们开发者,流程都是这样的:编码-->打包-->安装-->运行。如果,我以一个最简单的helloworld来举例,在eclipse新建这个工程到在设备上运行起这个应用,总共所花的时间不会超过30秒,这30秒时间里面,到底发生了什么?

   (1)打包

    这是一张从网上流传下来的图,它已经能非常明确的告诉大家,整个apk创建的流程到底如何

    在图中,黄色的部分,是开发者所需要提供的,绿色部分是命令执行的动作,蓝色部分就是命令执行之后生成的文件。(其中javac和dx之间少了jar包生成的过程,但是不妨碍理解)

    aapt:Android Asset Packaging Tool,即Android资源打包工具,它会生成R文件和资源包resources.resc。Android提供的。

    一点冷门小分享:在源码的资源文件中,会出现如下类型的资源 ,aapt会根据当前编译环境中ro.build.product的值,来决定使用哪一个字符串,而不会将这两种形式字符串都生成.R文件和资源文件。

<string="xxx" product="nosdcard">xxx</string>
<string="xxx" product="default">xxx</string>

  javac:Java语言编程编译器,它会将所有.java文件编译成.class文件。JDK提供的。

    dx:dex包生成工具,它会把所有的的.jar文件重新编码成dex文件。Android提供的。

    apkbuilder:apk打包工具,它会把资源和dex文件打包成apk工具。Android提供的。

    jarsigner:签名工具,负责用指定的证书给apk进行签名。Android提供的。

   (2)安装

    Android中的应用程序实质上是以包存在的(包含了dex和资源),与包的安装和卸载相关的主要有两个部分,包管家——PackageManagerService和包数据——/data/system/packages.xml。大致的安装流程如下图,    

    卸载过程正好相反,就不再赘述了。

   (3)运行    

    实际的运行情况比上面的图所示的要复杂的多,上面只是以一个典型情况来说明,更深入的可以看http://blog.csdn.net/column/details/androidluo.html的内容。对于我们应用开发者来说,只需要知道,Android弱化了进程的概念,强调组件的概念,而我们的Activity实质是运行在某个进程里面的,这个进程会继承linux进程的特性,它拥有怎么样的访问权限就足够了。

 

posted @ 2012-07-21 22:46  五分  阅读(1230)  评论(0编辑  收藏  举报