找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3387|回复: 0
收起左侧

Android程序开发

[复制链接]
ID:60266 发表于 2014-8-18 01:16 | 显示全部楼层 |阅读模式
开发环境: eclipse-jee-juno-SR1-win32.zip         【JDK 1.6】jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe
          installer_r20.0.3-windows【android sdk 升级下载包】
1:建立工程
      Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。
     Java平台Java虚拟机(Java Virtual Machine,简称JVM)和Java 应用编程接口(Application Programming Interface,简称API)构成Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1x版发展到1.2版。目前常用的Java平台基于Java1.4,最近版本为Java1.7。
     Java虚拟机(Java Virtual Machine 简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境,它是Java 最具吸引力的特性之一。Java虚拟机(JVM)一种用于计算机设备的规范,可用不同的方式(软件或硬件)加以实现。编译虚拟机的指令集与编译微处理器的指令集非常类似。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。ava语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。



    许多公司都开发了自己的中间件,但其与用户的沟通都各有不同,从而导致用户无法将各个公司不同的中间件组装在一块为自己服务。从而产生瓶颈。于是提出标准的概念。其实J2EE就是基于JAVA技术的一系列标准
    注:中间件的解释 中间件处在操作系统和更高一级应用程序之间。它充当的功能是:将应用程序运行环境与操作系统隔离,从而实现应用程序开发者不必为更多系统问题忧虑,而直接关注该应用程序在解决问题上的能力。容器的概念就是中间件的一种。
    Sun公司在1998年发表JDK1.2版本的时候, 使用了新名称Java 2 Platform,即“Java2平台”,修改后的JDK称为Java 2 Platform Software Develping Kit,即J2SDK。并分为标准版(Standard Edition,J2SE), 企业版(Enterprise Edition,J2EE),微型版(MicroEdition,J2ME)。J2EE便由此诞生。
       2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名以取消其中的数字“2”:J2EE更名为Java EE, J2SE更名为Java SE,J2ME更名为Java ME【差别不是很大】
    Java分为三个体系JavaSE(Java2 Platform Standard Edition,java平台标准版),JavaEE(Java 2 Platform,Enterprise Edition,java平台企业版),JavaME(Java 2 Platform Micro Edition,java平台微型版)。
   
Android应用程序的概念性描述
   Android应用程序包含了工程文件、代码和各种资源,主要由Java语言编写,每一个应用程序将被编成 Android的一个 Java 应用程序包(*.apk)

  由于Android系统本身是基于Linux 操作系统,因此Android应用程序也运行于Linux 环境中,它
们具有以下的特点:
??   在默认情况下,每一个应用程序运行于它们的Linux 进程中;
??   每个进程具有自己的虚拟机(VM),所以每个应用程序运行于独立的环境中;
??   在默认情况下,每一个应用程序具有唯一的Linux用户 ID。通过设置权限让应用程序只对用户和应用程
序本身可见,也有一些方法可以把它们暴露给其他的应用程序。

应用程序的组成部分
一般情况下,Android应用程序由以下4 种组件构成:
??   活动(Activity);
??   广播接收器(BroadcastReceiver);
??   服务(Service );
??   内容提供者(Content Provider )。
一个Android应用程序是一个包(Package),包中可能包含一个或者多个Android组件(component )
(1)活动(Activity)
   活动是最基本的Android应用程序组件,在应用程序中,一个活动通常就是一个单独的用户界面每一个
活动都被实现为一个独立的类,并且从活动(Activity)基类中继承而来,活动类将会显示由视图(View)控 件组成的用户接口,并对事件(Event)做出响应。大多数的应用程序都会有多个用户界面,因此便会有多个相
应的活动。


   Android 的一个活动一般对应界面中的一个屏幕显示,可以理解成一个界面,每一个活动在界面上可以包
含按钮、文本框等多种可视的UI元素。


(2)广播接收器(BroadcastReceiver)   
   广播接收器用于让应用程序对一个外部事件做出响应。例如:电话呼入事件、数据网络可用通知或者到了
晚上时进行通知。
(3)服务(Service)
一个服务是一个具有一段较长生命周期但没有用户界面的程序。例如:一个正在从播放列表中播放歌曲的
媒体播放器在后台运行。

(4)内容提供者(Content Provider)
应用程序能够将它们的数据保存到文件或SQLite 数据库中,甚至是任何有效的设备中。当需要将数据与其
他的应用共享时,内容提供者将会很有用。一个内容提供者类实现了一组标准的方法,从而能够让其他应用程序
保存或读取此内容提供者处理的各种数据类型。

应用程序的生命周期
(1)前台(Foreground)进程
(2)可见(Visible )进程
(3)服务(Service)进程
(4)后台(Background)进程
(5)空(Empty)进程
(1)前台(Foreground)进程
   与用户当前正在做的事情密切相关,不同的应用程序组件能够通过不同的方法使它的宿主进程移到前台。当下面任何一个条件满足时,都可以考虑将进程移到前台。
??   进程正在屏幕的最前端运行一个与用户交互的Activity(它的 onResume() 方法被调用);
??   进程有一个正在运行的BroadcastReceiver(它的BroadcastReceiver.onReceive()方法正在执行);
??   进程有一个Service ,并且在 Service 的某个方法(Service.onCreate()、Service.onStart() 或者Service.onDestroy())内有正在执行的代码。

(2)可见(Visible )进程
   它有一个可以被用户从屏幕上看到的Activity,但不在前台——其 onPause()方法被调用。例如:如果前台
的Activity是一个对话框,以前的Activity隐藏在对话框之后,就可能出现这种进程。这样的进程很重要,一
般不允许被杀死,除非为了保证前台进程的运行不得不这样做。

(3)服务(Service)进程
   有一个已经用startService()方法启动的Service,虽然这些进程用户无法直接看到,但它们做的事情却是用
户所关心的(例如:后台MP3 回放或后台网络数据的上传/ 下载)。因此,系统将一直运行这些进程,除非内
存不足以维持所有的前台进程和可见进程。

(4)后台(Background )进程
  拥有一个当前用户看不到的Activity(它的onStop() 方法被调用),这些进程对用户体验没有直接的影响。
如果它们正确执行了Activity生命周期,系统可以在任意时刻杀死进程来回收内存,并提供给前面3 种类型的
进程使用。系统中通常有很多这样的进程在运行,因此要将这些进程保存在LRU 列表中,以确保当内存不足
时用户最近看到的进程最后一个被杀死。

(5)空(Empty )进程
  不包含任何处于活动状态的应用程序组件。保留这种进程的唯一原因是,当下次应用程序的某个组件需要
运行时,不需要重新创建进程,这样可以提高启动速度。


以上所说的“进程”是从系统运行的角度考虑的,各种不同的进程可以理解成Android的各种组件的不同
状态机(state machine )。如果从应用程序的代码以及运行情况考虑,可以关注 Android的各种组件相对应的生命周期

1 .  活动的生命周期
2 .  服务的生命周期
3 .  广播接收器的生命周期
1 .  活动的生命周期
   活动是Android 中最重要、最基础的组件,用户在界面上看到的一个个可以切换的屏幕界面就是Android
中的活动。活动的生命周期如图1 所示。


??   运行活动的情景:当一个活动被启动时,活动中的onCreate()、onStart() 和onResume() 这3 个方法被依次调用,活动对应的界面出现在屏幕上。
??   活动被“覆盖”的情景:Android的活动一般都占据一个完整的屏幕,从当前活动启动另外一个活动时,另
一个活动将被启动到前台(Foreground ),当前活动转入后台(Background ),这时活动的 onPasuse()方法将
被调用,活动转入后台运行。如果活动变为不可见,还将调用onStop()方法。在转入后台时,onStop()是否
被调用取决于活动是否被完全覆盖,在新的活动有透明部分时,转入后台的活动依然“可见”,其他情况下
(较多数的情况)活动均进入不可见状态(被完全覆盖)。
??   活动被恢复的情景:当界面上最前面的活动退出后,它所覆盖的活动将被恢复,这时onResume() 方法将被
调用,活动重新转入前台运行。
??   活动完全退出的情景:当使用回退(Back)按钮退出活动时,onDestroy() 方法将被调用,活动关闭。如果
系统缺少内存时,也会杀死(kill)后台的活动,其中优先杀死不可见的活动,可见的活动一般不会被杀死。

2 .  服务的生命周期
服务可以长时间运行,它的特点是没有可视化界面,服务的生命周期如图2 所示

   使用StartService 运行服务的情景:使用这种方法启动服务,服务的onCreate()和onStart() 这两个方法将被调用,服务会在后台运行直到退出,退出时将调用onDestroy() 方法。
   使用bindService 运行服务的情景:使用这种方法启动服务,调用者(也就是服务的客户端)将获得和服务
交互的类,通过其调用时服务的相关内容会处于活动状态。

3 .  广播接收器的生命周期
   广播接收器有一个单一的回调方法onReceive() ,当广播消息到达接收器时,Android将调用这个方法,并
传递给包含在这个消息中的Intent  对象。
   广播接收器只有在这个方法的执行过程中才处于活动状态,当 onReceive() 返回后,广播接收器将不再处于
活动状态。广播接收器的功能类似于一个回调函数,只是单次运行时处于活动状态。


Android的工程编译
   在编译Android应用程序的过程中,Java 源代码使用Sun JDK 将Java 源程序编译成Java 字节码文件(多
个后缀名为.class 的文件),这一步骤和标准的Java 一致,然后通过Android自带的工具软件dex 把所有的字
节码文件转成dex 文件(单一文件classes.dex )。

    AndroidManifest.xml 文件经过Android打包工具(aapt )处理后形成二进制格式 AndroidManifest.xml 文件,实质的内容与以前相同。
   各个资源文件也经过aapt 处理,其中布局等文本文件处理成二进制文件,图片等文件保持不变。
最后将这三个部分组合成一个应用程序包(*.apk)。AndroidManifest.xml 描述文件、Java 源文件、资源文
件是Android应用程序的三个部分;在编译之前的工程中是这三个部分,在编译之后APK包依然是由这三个部
分组成的。


     如图所示,Android源文件经过了标准的Java 编译器的编译,又经过了dx工具的处理,标准的Java 字节
码作为整个Android编译的中间过程,最终生成的dex 文件(classes.dex )是一个单一文件,将工程中所有的Java源代码文件对应的字节码集成在一起。资源文件和AndroidManifest.xml 文件通过aapt 工具进行处理。
    在运行时,APK包将首先进行“安装”,也就是将其中的 dex 文件进行优化,优化后的文件被保存到缓存
区域,生成格式为 dey 的优化文件,然后 Dalvik 虚拟机将运行这些dey 文件。如果应用程序包文件不发生变化,dey 文件不会被重新生成;在应用程序包发生更新的情况下,将重新由dex 生成dey。
    Android和标准 JAVA 开发的JAR 包最大的不同在于,标准JAVA 字节码是每个文件一个Clash文件,而
Android中的一个包将生成一个Dex 文件。


使用am工具启动Android 应用程序
  除了在GUI 界面中启动应用程序之外,在 Android的命令行终端(可以使用 adb shell 进行连接)也可以使
用am 工具启动应用程序。

   使用am 启动应用程序的格式如下所示:
   # am start -n {包名}/{ 包名}.活动名



应用程序开发的结构
Android应用程序开发是Android开发中最上面的一个层次,它们构建在Android系统提供的API 之上。
Android应用程序的基础是Android提供的各个Java 类,这些类组成了Android系统级的API


Android应用程序可以基于两种环境来开发:Android SDK 和Android源代码。Android系统本身内置了一部分标准应用(也包括内容提供者),在仿真器(包括 SDK环境和源代码环境)中已经包含这些内置的程序。 用户自行开发的应用程序和Android内置的应用层程序包位于同一个层次,都是基于Android框架层的API来构建的,它们的区别仅仅在于他们是否被包含在默认的Android系统中。


Android目录结构

src : Java 源代码文件
assets:主要放置多媒体等数据文件。
AndroidManifest.xml: 工程描述文件,相当于应用的配置文件。在此文件里必须声明应用的名称,应用所用到的Activity,Service,Reveiver等。
可惜的是drawable目录下不能分子级目录,如果有这方面需求只能通过命名方法来加以区分。

每个犹序都会有一竢oidManifest在它的根目录里面。这个清单为Android系统提供了这个应用的基本信息,系统在运行之前必须知道这些信息,另外,如果我们使用系统自带的服务,如拨号服务,应用安装服务等,都必须在AndroidManifest.xml文件中声明权限

AndroidManifest.xml的功能:

命名应用程序的Java应用包,这个包名用来唯一标识应用程序;

描述应用程序的组件,对实现每个组件和公布其功能的类进行命名,这些声明使得Android系统了解这些组件以及它们在什么条件下可以被启动

决定哪个组件运行在哪个进程里面

声明应用程序必须具备的权限,用以访问受保护的API,以及和其他进程的交互

声明应用程序其他的必备权限,用以组件之间的交互

列举application所需要链接的库

drawable-*dpi:  将图标按分辨率的高低放入不同的目录,其中draeable-hdpi用来存放高分辨率的图标,drawable-mdpi用来存放中等分辨率的图标,drawable-ldpi用来存放低分辨率的图标

res :
资源文件
   

    values文件夹:用来存放文字的信息
        (1)strings.xml:用来定义字符串和数值
              <?xml version="1.0"encoding="utf-8"?>
              <resources>
                  <string >Hello World, Hello 3G</string>
                  <string >Android1.1</string>
                    <string >哥想你了</string>
                  <string >按钮1</string>
                  <string >按钮1</string>
              </resources>
             每个string标签生命了一个字符串,name属性指定它的引用值
        (2)为什么要把这些出现的文字单独放在strings.xml文件中?
           答案:一是为了国际化,如果需要将文件中的文字换成别的国家的语言,就可以只需要替换掉一个strings.xml文件就可以了;二是为了减少应用的体积,例如,我们要在应用中使用“哥想你了”这句话1000次,如果我们没有将“哥想你了”定义在strings.xml文件中,而是直接在应用中使用时写上这几个字,那么我们就会在应用中写4000个字。4000个字和4个字占用的内存可是有很大差距的啊,况且手机的内存本来就小,所以应该是能省就省          (3)另外还有arrays.xml,color.xml等定义数组,颜色的,都最好用单独的一个xml文档

     layout文件:用来存放界面信息
     <?xml version="1.0"encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical">

    <TextView

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/test"/>

   

</LinearLayout>

<LinearLayout>元素:线性布局的意思,在该元素下的所有子元素都会根据他的”orientation”属性来决定是按行还是按列或者按逐个显示进行布局的

<TextView>元素:是一种显示控件,他的”text”属性指定了在这个元素上显示的内容

gen目录:gen目录下只有一个自动生成的“R.java”文件

R.java文件:默认有attr,drawable,layout,string这四个静态内部类,每个静态内部类对应一中资源,如layout静态内部类对应layout中的界面文件,string静态内部类对应string内部的string标签。如果在layout中在增加一个界面文件或者在string内增加一个string标签,R.java会自动在其对应的内部类增加所增加的内容。

R.java除了自动标识资源的索引功能外,还有另一个功能,就是当res文件中的某个资源在应用中没有被用到,在这个应用被编译时,系统不会把对应的资源编译到应用中的APR包中。

  可以参考:原文链接:http://blog.csdn.net/xy84928/article/details/7047419

<project.properties>应用要求运行的最低Android版本
<android 2.2>  存放Android自身的jar包






android应用程序的入口  android应用程序中,并没有像c++和java这样有main函数来作为应用程序的入口.android应用程序提供的是入口Activity,而非入口函数. 在eclipse中创建一个android应用程序的时候,默认会创建一个Activity.这个Activity实际上就是入口Activity了.从哪里定义它是Activity呢?AndroidManifest.xml文件中定义了整个android应用所包含的Activity.默认生成的Activity的定义为:
        <activity android: android:label="@string/app_name">
            <intent-filter>
                <action android: />
                <category android: />
            </intent-filter>
        </activity>
   android应用程序实际上是由多个Activity按照一定的次序拼装起来的,只不过拼装的过程中,后台传递了一些数据,使得各个Activity之间能比较好的衔接起来。
    action节点中的android.intent.action.MAIN表明它所在的Activity是整个应用程序的入口点.而category中的android.intent.category.LAUNCHER意思是把这个Activityg归属到加载器类,即把这个Activity标注为自动会加载和启动的Activity,这样程序启动时候就先加载这个Activity了.


Android的UI系统实现1  控制和基本事件的响应
2  键盘事件的响应
3  运动事件的处理
4  屏幕间的跳转和事件的传递
5  菜单的使用
6  弹出对话框
7  样式的设置

Android UI 系统的知识结构如下图所示:



   对于 一个GUI系统地使用,首先是由应用程序来控制屏幕上元素的外观和行为,这在各个 GUI 系统中是
不相同的,但是也具有相通性。Android系统在这方面,包含了基本的控件控制,键盘事件响应,窗口间跳转、
对话框、菜单、样式等内容,这是GUI 系统所具有的通用内容。
1  控件和基本事件的响应
   在任何一个GUI 系统中,控制界面上的控件(通常称为控件)都是一个基本的内容。对于 Android应用程
序,控件称为View

   在Android中,在处理UI中的各种元素的时候,两个程序中的要点为:
??      1.得到布局文件(XML)中的控件句柄
??     2.设置控件的行为       
  1.1 事件响应方法





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表