1 / 62

解读程序项目架构

解读程序项目架构. Android 智能手机开发 2011.09. 第一个应用程序: helloworld. 第一步:创建新项目,并将这个项目名称定为 helloworld. 字段说明: Project name: 这个项目所在的文件夹名称 Application name: 应用程序显示在屏幕上的标题 Package name: 包名称。 Java 的习惯是用不同的包名来区分不同的类。依照项目的不同,我们会取不同的路径名称。 Build target: 选择用来编译项目的 SDK 配置. 应用程序的基本文件架构.

carina
Download Presentation

解读程序项目架构

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 解读程序项目架构 Android智能手机开发 2011.09 湖南城市学院

  2. 第一个应用程序:helloworld • 第一步:创建新项目,并将这个项目名称定为helloworld 湖南城市学院

  3. 湖南城市学院

  4. 湖南城市学院

  5. 字段说明: • Project name:这个项目所在的文件夹名称 • Application name:应用程序显示在屏幕上的标题 • Package name:包名称。Java的习惯是用不同的包名来区分不同的类。依照项目的不同,我们会取不同的路径名称。 • Build target:选择用来编译项目的SDK配置 湖南城市学院

  6. 应用程序的基本文件架构 • 新建项目后,会创建不少文件,一个应用程序的基本文件架构如下: 湖南城市学院

  7. 1、src/:源代码目录 • src目录中包含了一个android应用程序所需的各个程序源文件。 • 以helloworld程序为例,src目录中比较关键的程序是helloworld.java 湖南城市学院

  8. src/:源代码目录 • helloworld.java这个文件的名称会随着我们创建项目窗口中所填入create Activity字段值的不同而不同。 • helloworld.java是新程序项目中的主要程序块。 • Activity类文件 • 我们开发应用程序的多数时间,都是在和src目录下的程序源文件与res目录下的XML描述文档打交道 湖南城市学院

  9. 预先已创建好的基本程序逻辑。其内容如下: 湖南城市学院

  10. helloworld.java package com.demo.android.helloworld; • 这一行的作用是指出这个文件所在的命名空间。不同的人写程序可能出现变量重名现象,为了解决这个问题引进命名空间这个概念,你所使用的库函数或变量都在这个命名空间中定义,这样就不会出现变量或库函数冲突。 • package(包)是其关键字。Java的package设计成与文件系统结构相对应,如我们的package设置值是com.demo.android.helloworld,则这个类就该在制定目录的com/demo/android/helloworld路径下可以找到。 湖南城市学院

  11. helloworld.java • 同时也别忘了java程序语言每段代码语句的结尾处,与大部分程序语言一样需加上一个分号“;”,以表示一行程序代码的结束。 湖南城市学院

  12. helloworld.java Import android.app.Activity; Import android.os.Bundle; • 程序默认导入android.app.Activity和android.Bundle两个Package,在所有的android应用程序中,都会用到这两个包。 • Import(导入)是用作导入Package(包)的关键字。 • 在java语言中,使用到任何API前都要事先导入相对应的Package。 湖南城市学院

  13. helloworld.java Public class helloworld extends Activity{ • “helloworld”是这个类的名称,class则是用作声明类关键字。Public关键字是用来修饰helloworld这个类。表示helloworld是个公开的类,可以从package外部取用。 • extends Activity,则表示helloworld这个类的功能、类型等完全继承自Activity类。extends是继承类的关键字。Activity是来自我们刚才导入的包:android.app.Activity 湖南城市学院

  14. 例如:一个圆柱体类 class Cylinder { double radius;//声明成员变量radius int height; double pi=3.14 void area()//定义成员方法area(),用来计算底面积 { ……… } void volume()//定义成员方法volume()// ,用来计算体积 { ……… } } 湖南城市学院

  15. • 每一个圆柱体Cylineler,无论尺寸大小,都有底半价和高两个属性,而这两个属性既是圆柱体的数据成员radius(半径)和height(高) • 在圆柱体类中,还将计算底面积与体积这两个函数纳入圆柱体类中。java语言称这种封装于类内的函数称为“方法”(Methods)。 • 注意:Java语言把数据成员称为属性;而把函数成员称为成员方法,简称方法 • 传统的程序设计语言里,计算面积与体积通常由独立的函数来处理,但在面向对象程序设计里,这些函数是封装在类之内的。 湖南城市学院

  16. pi radius height area() volume () 成员变量 成员方法 图1 圆柱体类 湖南城市学院

  17. • 类的定义 • 所谓类就是把事物的数据与相关功能封装(Encapsulate)在一起,形成一种特殊的数据结构,用以表达真实事物的一种抽象。 • Encapsulate原意是“将…..装入胶囊内”,现在的胶囊就是类,而成员变量与成员方法便是被封入得东西 • 在上例中,pi,radius,height是成员变量,area(),volume()是成员方法 湖南城市学院

  18. 对象 • 类与对象的关系: • 类是对某一类事物的描述,是抽象的、概念上的定义; • 对象则是实际存在的属该类事物的具体的个体。 • 下面用一个现实生活中的例子来说明类与对象的概念。图2所示的是一个“汽车类”与“汽车实例”的例子。 湖南城市学院

  19. 汽车设计图 第3辆 第1辆 第2辆 图2 汽车类与汽车的实例 湖南城市学院

  20. 其中,汽车设计图就是“汽车类”,由这个图纸设计出来的若干个汽车就是按照该类生产出的“汽车对象”。 湖南城市学院

  21. 创建对象 通过如下的两个步骤来创建对象: 声明指向“由类所创建的对象”的变量; 利用new运算符创建新的对象,并指派给前面所创建的变量。 例如,要创建圆柱体类的对象,可用下列的语法来创建 Cylinder volu; //声明指向对象的变量volu volu=new Cylinder(); //利用new创建新的对象,并让变量volu指向它 湖南城市学院

  22. 创建对象 另外在创建对象时也可以将上面的两个语句合并成一行,即在声明对象的同时使用new运算符创建对象。如: Cylinder volu=new Cylinder(); 湖南城市学院

  23. 对象的使用 创建新的对象之后,就可以对对象的成员进行访问。通过对象来引用对象成员的格式如下: <对象名>.<对象成员> 在对象名和对象成员之间用“.”相连,通过这种引用可以访问对象的成员。 例如,若将对象volu的半径赋值为2.8,把高赋值为5,其代码为: volu.radius=2.8; volu.height=5; 湖南城市学院

  24. 【例1】定义一个圆柱体类,并创建相应的对象,然后计算圆柱体的底面积与体积。【例1】定义一个圆柱体类,并创建相应的对象,然后计算圆柱体的底面积与体积。 湖南城市学院

  25. class Cylinder //定义Cylinder类 { double radius; //定义成员变量radius int height; //定义成员变量height double pi=3.14; void area() //定义无返回值的方法area(),用来计算圆柱底面积 { ………………………….. } double volume () //定义返回值为double型的方法volume (),计算体积 { return (pi* radius* radius)*height; } } 湖南城市学院

  26. public class app6_1 //定义公共类 { public static void main(String args[ ]) //程序执行的起始点 { Cylinder volu; volu=new Cylinder(); //创建新的对象 volu.radius=2.8; //赋值圆柱volu的底半径 volu.height=5; //赋值圆柱volu的高 ………………………………………. volu.area(); //输出面积 System.out.println(“圆柱体体积=”+volu.volume()); //输出体积 } } 湖南城市学院

  27. 继承 • 类的继承是面向对象程序设计的一个重要特点,通过继承可以实现代码的重用。 • 被继承的类称为父类,由继承而得到的类称为子类 湖南城市学院

  28. class person • { • string name; • int age; • public void setNameAge() • {…… • } • } • class student extends person • { • string department; • void SetDepartment(string dep) • {….. • } • } 湖南城市学院

  29. 继承 • 此例person是父类,student是子类 • person类有成员变量name,age,方法SetNameAge();student有成员变量department,方法SetDepartment()。 • person类的成员都会被student类继承 湖南城市学院

  30. package(包) • 利用面向对象技术开发一个实际的系统时,通常需要设计许多类共同工作,但由于Java编译器为每个类生成一个字节码文件,同时,在Java语言中要求文件名与类名相同,因此若要多个类放在一起,就要保证类名不能重复。 • 但当声明的类很多时,类名冲突的可能性很大,这时,就更需要利用合理的机制来管理类名。 • 为了更好地管理这些类,Java语言中引入了包的概念来管理类名空间 湖南城市学院

  31. package(包) • 包的定义 • 所谓包,就是Java语言提供的一种区别类名空间的机制,是类的组织方式,每个包对应一个文件夹,包中还可以再有包。 • 在源程序中可以声明类所在的包,就像保存文件时要说明文件保存在那个文件夹中一样。 • 同一包中的类名不能重复,不同包中的类名可以相同 • 为了便于编程和管理,通常我们将需要在一起工作的类放在一个包中 湖南城市学院

  32. package(包) • 创建包 • package语句是Java源文件的第一条语句,指明该文件中定义的类所在的包。 • 格式:package 包名1[.包名2[.包名3]…]; • 经过package的声明后,在同一文件内的所有类或接口都被纳入相同的包中 • Java编译器把包对应于文件系统的文件夹进行管理。同时,在package语句中用“.”来指明文件夹的层次 • package cgj.ly.myPackage; • 指明这个包的文件存储在文件夹cgj\ly\myPackage中。 • 实际上,创建包就是在当前文件夹中创建一个子文件夹,以便存放在这个包中包含的所有的.java文件 湖南城市学院

  33. package(包) • 包与子包的定义,实际上是为了解决名字空间、名字冲突,它与类的继承没有关系。事实上,一个子类与其父类可以位于不同的包中 • 如果改变一个包名,就必须同时改变对应的文件夹名 • Java语言利用import语句引用Java定义的包 湖南城市学院

  34. android.app.Activity • android.os.Bundle 湖南城市学院

  35. public关键字 • 在面向对象语言程序设计中,设定一种机制来限制对成员的访问方式,避免安全上的漏洞。 • 对于类的话有 • 私有成员。定义方式:在类的成员声明的前面加上修饰符private。私有成员自能被该类自身访问和修改,而无法被该类的外部访问到 • 公有成员。定义方式:在类的成员声明的前面加上修饰符public。公有成员可以被所有其他的类所访问 湖南城市学院

  36. class Cylinder { private double radius;//声明成员变量radius private int height; private double pi=3.14 void area()//定义成员方法area(),用来计算底面积 { return pi*radius*radius;//在类内可以访问私有成员radius和pi } public void SetCylinder(double r,int h) { ……… } } public class app_2 { public static void main(string[]args { Cylinder volu=new Cylinder(); volu.SetCylinder(2.5,-5); …….. } } 湖南城市学院

  37. Activity • Activity是Android应用程序与用户互动的主要元素。当用户打开的一个应用程序,第一个看到的画面就是一个Activity。假如一个程序中包含多个画面时,会定义多个不同的Activity。 • Activity是最基本的模块,我们称之为“活动”,在一个应用程序中,一个Activity通常是一个单独的屏幕。 • 每一个活动都被实现为一个独立的类,并且从活动基类中继承而来。 湖南城市学院

  38. Activity • Activity有四个状态: • 活动:Activity由用户启动,正在运行,并且在前台。在Android平台上,同一个时刻只会有一个Activity处于活动状态 • 暂停:Activity由用户启动,正在运行并且可见,但是一个通知或某个事件覆盖了屏幕的一部分。在这段时间,用户可以看大Activity,但不能与之交互。是退到背景画面的状态 • 停止:Activity由用户启动,正在运行,但被已启动或被切换到的其他Activity所隐藏。是其他Activity在执行,而这个Activity已经离开屏幕,不再动作的状态 • 死亡:Activity从未启动,或者Activity被手动终止了,或已经被系统回收的状态 湖南城市学院

  39. 配置Activity • Android应用要求所有的应用程序组件( Activity、Service、ContentProvider、BroadcastReceiver)都必须进行配置 湖南城市学院

  40. 2、AndroidManifest.xml 湖南城市学院

  41. AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=http://schemas.android.com/apk/res/android • AndroidManifest.xml这个文件是以xml格式描述,每个Android应用程序都需要一个AndroidManifest.xml文件。而且每份AndroidManifest.xml文件都会出现这段话。而整个AndroidManifest.xml文件的语句,都包含在“mainfest”这个主要标签中。 湖南城市学院

  42. mainfest(列表)标签的属性 package="com.demo.android.helloworld" android:versionCode="1" android:versionName="1.0" • Package是manifest(列表)标签的一个特别属性,可以用来标明这个应用程序的进入点存在于“com.demo.android.helloworld”这个命名空间/路径中 • 应用程序版本号 • android:versionCode是开发者用的内部版本号 • android:versionName是用户看到的版本号 湖南城市学院

  43. <application android:icon="@drawable/icon" android:label="@string/app_name"> • application标签,定义所有这个应用程序用到的Activity、服务等信息。 • application标签的属性 • android:icon=“@drawable/icon ” android:icon定义了这个应用程序将显示到Android手机主画面中的应用程序图标。 android:icon=“@drawable/icon “表示应用程序图标的资源文件存在于“res/drawable/icon”中 • android:label=“@string/app_name”用来指定应用程序将显示在主画面上的名称,名字即为“res/values/string.xml”中定义的字符串app_name 湖南城市学院

  44. <activity android:name=".helloworld" android:label="@string/app_name"> • Activity标签的属性 • android:name=“.helloworld”指出这个Activity所对应的类(class)。”.helloworld”代表“com.demo.android.helloworld”的简称 • android:label=“@string/app_name“指定应用程序将显示在Activity画面上方的名称 湖南城市学院

  45. <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> • “intent-filter”标签定义了这个“Activity”的性质 • “intent-filter”中主要包含了两个标签:action和category标签 • android:name=“android.intent.action.MAIN”表示:这个Activity是此应用程序的进入点(就像程序中常见的main主程序),打开这个Activity时,应先执行这个Activity • android:name=“android.intent.category.LAUNCHER“表示这个Activity将会显示在Launcher的应用程序列表中。也就是默认开机时,可以从桌面下方拉出的应用程序列表。 湖南城市学院

  46. AndroidManifest.xml • AndroidManifest.xml这个文件所表达的信息:在com.demo.android.helloworld路径下的helloworld.java这个文件中,已定义了一个主要的Activity;当我们打开Android的时候,显示的是位于res/drawable/icon的图标。一旦我们按下图标来启动这个应用程序,Android应用程序框架会去寻找到定义了android.intent.action.MAIN内容的“.helloworld”Activity,并调用执行。 湖南城市学院

  47. helloworld.java /** Called when the activity is first created. */ • /* */是Java语言的多行注释符号,位于其中的文字内容不会被编译 • 顺便提下,“//”表示的是单行注释。只有与“//”符号同行的文字才不会被编译 @Override • @开头的语句表示装饰子语句,@override语句的作用是告诉程式我们要重写(override)这个oncreate方法。 湖南城市学院

  48. helloworld.java Public void onCreate(Bundle savedInstancestate){ • onCreate方法是每个Activity类在初始化时都会去调用的方法。onCreate是这个方法的名称。Void则是声明了这个方法的返回值的类型。方法的返回值的类型即是这个方法的类型。onCreate这个方法使用void类型,表示onCreate这个方法不需要返回值。 • public关键字是用来修饰oncreate这个方法。表示onCreate是个公开的方法,可以在Bmi类外部调用。 湖南城市学院

  49. helloworld.java • Bundle类是我们前面所导入的Package之一。Budle类可以保存Activity(活动)上一次关闭时的状态。 • Android应用程序运行、换背景等待、关闭时,都会用到savedInstanceState这个实体来处理内存相关的事宜。onCreat方法从savedInstanceState实体中得到前一次保存的状态。 湖南城市学院

  50. helloworld.java Super.onCreate(saveInstanceState); • Super是关键字。代表这个helloworld类的上层类Activity。这句话的意思是:执行Activity类中的onCreate方法的内容。这么做的目的是因为将原本的onCreate方法内容保留,并在其中添加我们的内容。 • 执行原本的onCreate方法时,仍然需要提供原本onCreate方法所需的传入参数。因此这句话中,我们将savedInstanceState这个参数传入原本的onCreate函数中。 湖南城市学院

More Related