Android应用开发2010年8月13日Android平台架构Android环境配置和开发Android应用程序构成如何开发一个例子目录Android平台架构JNIJAVAC/汇编简介•Linux核心:Android依赖Linux2.6来提供核心的服务,例如存储管理、进程(Process)管理等•AndroidRuntime:Java语言层级的VirtualMachine•Libraries:Android里已经提供的C/C++组件。例如,SQLite、OpenGL3D等。•应用框架(ApplicationFramework,):这是结合Applications和Libraries的主架构,让Libraries組件能不断地为Applications所重复使用•应用程序(Applications):根据用户的期望而将AF的组件及Libraries组件组合而成的服务。用汉堡比喻Android平台架构Android环境配置和开发Android平台架构Android应用程序构成如何开发一个例子目录如何安装AndroidSDK和Eclipse插件所需开发环境:JDK5或JDK6(仅有JRE不够)Eclipse3.5(galileo)下载ADT的Eclipse插件安装Eclipse插件(ADT)启动Eclipse,选择HelpInstallNewSoftware,在出现的对话框里,点击Add按钮,在对话框的name一栏输入“ADT”,然后点击Archive...,浏览和选择已经下载的ADT插件压缩文件。点击OK.。返回可用软件的视图,你会看到这个插件,然后选择DeveloperTools(会选中下面的“AndroidDeveloperTools”和“AndroidEditors“),点击Next,最后重启Eclipse。下载AndroidSDK:下载完SDK后,把.zip文件解压到你电脑上合适位置。启动Eclipse,选择window-preferences,在打开的视图左边点击android,在右边的SDKLocation中选择AndroidSDK所在位置。开发第一个Android应用打开Eclipse,新建项目(点击FileNewProject),在项目列表中展开Android目录,选择AndroidProject,如下图:开发第一个Android应用开发第一个Android应用点击”finish”即可完成项目的创建,创建后的项目已经是一个可运行的Android应用,我们可以通过下面方式运行此应用:点击工具栏上手机形状的虚拟设备管理器(简称“AVD“),如下:开发第一个Android应用在打开的虚拟设备管理器中创建一个虚拟手机:开发第一个Android应用在项目上右键点击runasAndroidapplication,如下图:Android应用程序架构src/java原代码存放目录gen/自动生成目录gen目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res目录的xml界面文件、图标与常量,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了界面、图标、常量等各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。res/资源(Resource)目录在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。具体请看ppt下方备注栏。AndroidManifest.xml功能清单文件这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。default.properties项目环境信息,一般是不需要修改此文件目录Android环境配置和开发Android平台架构Android应用程序构成如何开发一个例子Android应用程序构成ActivityServiceBroadcastReceiverContentProviderIntentActivity•Avisualuserinterface•通过view管理UI•每一个有用户界面的应用至少包含一个activity•一个应用可以有多个activity,其中一个作为mainactivity用于启动显示•Activity通过startActivity或startActivityForResult启动另外的activityActivity生命周期•Activity通过onCreate被创建•当一个activity失去焦点,该activity将进入pause状态,系统在内存不足时会将其终止•当一个activity被另一个activity覆盖,该activity将进入stop状态,系统在需要内存的时候会将其终止Intent•类似于消息、事件通知•Intent构成:action、category、data•Activity、Service、broadcastreceiver之间的桥梁IntentactivityserviceBroadcastreceiverIntent•两类intent:–显式:指定具体的目标组件处理–startActivity(newIntent(ActivityLifecycle.this,AnotherActivity.class));–隐式:由系统接受并决定如何处理–startActivity(newIntent(Intent.ACTION_DIAL));•在AndroidManifest.xml中定义activity、service、broadcastreceiver接受的intentIntent•Intentfilter:action、category、dataframeworkComponentnameActionDataCategoryintentcomponentactivityserviceBroadcastreceiver实例action--DIALdata--tel:01038639592action--VIEWdata--•没有UI,启动之后一直运行于后台•例子:音乐播放器•与应用程序的其他模块(例如activity)一同运行于主线程中•通过startService或bindService创建Service•通过stopService或stopSelf终止Service•一般的,在activity中启动和终止serviceService生命周期Context.stopService()Serivce.stopSelf()Context.startService()Context.bindService()服务--ServiceAndroid中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。服务的开发比较简单,如下:第一步:继承Service类publicclassSMSServiceextendsService{}服务--Service第二步:在AndroidManifest.xml文件中的application节点里对服务进行配置:serviceandroid:name=.SMSService/服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。服务--Service如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()--onDestroy()方法。服务--Service服务常用生命周期回调方法如下:onCreate()该方法在服务被创建时调用,该方法只会被调用一次,无论调用多少次startService()或bindService()方法,服务也只被创建一次。onDestroy()该方法在服务被终止时调用。与采用Context.startService()方法启动服务有关的生命周期方法onStart()只有采用Context.startService()方法启动服务时才会回调该方法。该方法在服务开始运行时被调用。多次调用startService()方法尽管不会多次创建服务,但onStart()方法会被多次调用。与采用Context.bindService()方法启动服务有关的生命周期方法onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。onUnbind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务解除绑定时被调用。采用startService()启动服务采用Context.startService()方法启动服务的代码如下:publicclassHelloActivityextendsActivity{@OverridepublicvoidonCreate(BundlesavedInstanceState){......Buttonbutton=(Button)this.findViewById(R.id.button);button.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewv){Intentintent=newIntent(HelloActivity.this,SMSService.class);startService(intent);}});}}