`
ztl1010
  • 浏览: 21722 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

《宅男的android开发指南》(翻译)--1

阅读更多

=====================================

内容只是节选的文字,完整的在附件word文件中

=====================================

1 Android的构成

Activities

Android里,用户界面是通过Activity来构建的。我们可以认为,Activity就是应用程序(c/s)中的窗口,或者是对话框。

同时,也存在这种可能,我们的Activity是没有界面的,这时候我们就会把代码放在一种称为Conten Providers(内容提供者)或者Services(服务)的容器中,这会在后面介绍。

Content Providers

Content Providers提供了一个抽象级别的数据存储方式,以便于多个应用程序访问或共享。当需要访问别的程序中的数据,或者希望自己的数据被别的程序访问的时候,android鼓励开发人员使用ContentProvider来保存数据

Intents

Intents(意图),在整个设备(android)中运行,表示系统级的信息,用于通知应用程序各种事件,从硬件的状态改变(比如sd卡插入手机),电话打入,收到短信,到程序的事件(如Activity从主菜单中被启动了)。不仅android系统可以响应intent,我们也可以创建自己的意图,去启动其他的Activity,或者告诉自己有特殊的情况出现等等吧。

Services

ActivityContentProviderintent 接受者都是只有较短的存活期的,可以在任何时间被关闭。Services,换句话说,是被设计根据需要,可能会一直保持运行状态,独立于任何Activity的。当然,它是在后台运行。我们可以使用Service来检查RSS程序的更新啊,或者在后台播放音乐,尽管控制音乐的Activity已经被关闭了等

 

               Activity UI-----User seecontrol  :平等的~

                          intent (意图)------消息分发机制

    Data(Sql,File,Preferences,net)   other UI(Activty,Service)      local service(call,sms,mms..)…….

 

意图:

    类似于 SOAP服务。

定义一个全局场景,里面提供各种官方符合和非官方服务。

每个服务----- activity

每个Activity:都有一个标签,表示它能做什么事情!!!可以是官方的,也可是定制的。

比如: ActivityA: 可以做 doA() 

    <intent-filter>

      <anction name=”doA()”/>

    </intent-filter>

那么,有一个ActivityB

     代码中:

       ….

     ..call  android:      intent: doA();

 

这个时候,android就会查找manifest文件,看是否有存在合适的来处理这个

 

 

2 Android项目结构

   Android的项目跟别的java项目的结构很类似的。只不过androi的程序在运行的时候,使用自己的模拟器。接下来,我会带大家快速的了解下android的项目结构,帮助你们有个 感知,以便于看的明白接下来的代码案例等。

下面是android自带的APIDemo的项目结构图

 

  项目根目录内容(Root Contents

当你创建了一个android项目,你会的到如下几个项目在项目根目录中:

l       androidmenifest.xml,

这个xml文件,是用来描述整个android项目的构成的,比如包含什么组件。如Activityservice等。

l       build.xml

ant构建脚本,我们这里没有用到ant,所以没看到

l       bin/

保存androi可执行程序的地方

l       src/

   源代码

l       res/

保存resources资源的,比如icon图标,GUI布局等。Res资源在程序打包的时候,会一并打包进程序中去哦。

l       assets/

包含其他的一些静态文件

 

其他的一些说明

  当你第一次编译你的程序的时候(通过ant,当然我们目前都是使用eclipse,它会自动编译),在src以外,android会自动创建一个R.java文件。它包含了一系列的静态的数字常量,这些数字都与存放在res文件夹下的文件一一对应。我们不能自己修改R.java文件,它是由android为你处理的。在以后使用android的过程中,你会一直使用这个文件,来引用各种资源,比如程序的布局(R.layout.main)。

  同时,在res资源文件夹下,我们一般是用于存放各种资源文件的。常见的有:

l       res/drawable/ 用于存放图片(png.等)

l       res/layout/ 存放基于xml文件的各种布局

l       res/raw/ 各种常见的文件,比如一个cvs文件

l       res/xml文件夹,包含常见的xml文件了

 

 

你还可能会遇到其他的一些文件夹

 

如:bin文件夹

l       bin/classes  保存编译后的java文件

l       bin/classes.dex  包含创建的可执行的dex 文件,该文件是由java class文件编译生成的

l       bin/yourapp.apk apkandroid的可执行程序

 

apk文件,其实是一个zip类型的压缩文件。包含.dex文件,编译在里面的资源文件,其他的一些不能编译的文件(raw文件夹下的),以及androidmanifest.xml文件

 

 

 

 

3 深入Manifest

任何andoid应用程序的基础就是这个manifest文件 : Androidmanifest.xml文件。生成在你的项目的根路径里。在这个文件中,你声明了你的应用程序里包含有声明:activities,services,等等。你也可以借此表明,你是如何安排这些组件附加到Android系统中去的。比如,你声明了哪些Activity可以出现在手机设备的menu菜单中。

当我们自己创建了一个应用程序以后,会得到系统自动为我们生成的一个初始的manifest文件。对于一个简单的应用程序来说,只需要提供一个简单的Activity就够了,或者再做一点点的修改。但是比较复杂的,比如Android自带的apidemomanifest文件,就超过了1000行代码。

 

所以,程序越复杂,manifest文件就越庞大。

让我们开始认识manifest

 

  很自然的,manifest的文件的根元素,就是manifest

 

我们要注意到命名空间的声明。

一般情况下,我们是不需要修改这个标签的,因为它是Android定义好的,而里面的属性依赖于xmlns的定义。

我们只需要定义package这个属性的值即可。那么package对应的值,也就是包名,可以背理解为应用程序的(更直观点就是源代码)的基本路径(base root)。那么,只要我们在manifest文件中需要一个类名,我们只需要用“。”来代表这个基本路径。比如,我们需要在manifest文件中关联com.commonsware.androidTest1这个类,我们只需要用 “。Test1”即可,因为“。”就代表着com.commonsware.android这个包名了

 

 

PermissionsInstrumentatons,以及Applications

接下来,你会发现还有更多的标签元素

l       uses-permission 元素

   这个元素表明,你的应用程序拥有什么权限来启动什么样的功能

l       permission 元素

 这个标签元素声明了,如果别的Activity或者Service要想访问你这个Activity或者Service,那么它所需要具有的权限。

l       instrumentation 元素

主要适用与测试程序用的,比如记录日志,或者监控,记录程序的七大,按键事件等等

一般是放在test测试包里。

 

下面是一个应用了该标签的例子

 

l       application 元素

一个application标签元素,定义了manifest 文件中描述的应用程序集合

 

例子:

 

 

 

我们的应用程序需要做些什么,不是嘛?

 

Manifest文件真正的精华在于它的子标签元素 :application标签

默认情况下,当你创建了一个Android项目,你就会得到一个Activity元素,并表现在manifest文件中去,

 

<activity >标签,提供了android :name 属性,用于表示某一个具体类的名字,android :label表示Activity所显示的文本标签(类似于网页的title),通常情况下,还会有intent-filter标签,来描述在什么情况下,这个Activity会被显示出来。起到过滤的作用。

 

<receiver>标签。在某些不是由Activity触发的事件发生的情况下,比如sms短信,或者电话进来了。这些都会调用intent receiver

 

还可能会有

<provider>

   表示content providers组件,这些组件用于提供数据给你的符合权限的Activity的。

<service.>

   用于描述后台服务的标签。

 

这些标签我们都会在后面的内容详细介绍,我们就不做详细说明了。

 

 ======================================================================

 

因为javaeye不能把图片直接从word中贴进去,我每篇都会把对应的word文档作为附件上传,

博客里的文字就是纯文字了,朋友们可以从文字看是否需要,完整的带有图片什么的都在最后面的附件中了~~

 

 

分享到:
评论
2 楼 zhangweieye 2010-09-20  
怎么 是空的啊
1 楼 amen1024 2010-06-26  
学习了,不过这个附件有问题,word里空的。。

相关推荐

Global site tag (gtag.js) - Google Analytics