Android学习笔记Androidplatform是一个用于开发移动程序的软件包,它包括了操作系统、中间件及一些关键应用。开发者能使用androidSDK为Androidplatform开发应用,这些应用使用JAVA语言书写,运行在虚拟机Dalvik(一个专为手机程序开发的基于linux内核的JAVA虚拟机)。=%E7%BF%BB%E8%AF%91%E4%BB%BB%E5%8A%A1%E9%A2%86%E5%8F%96&printable=yes=21什么是Android1.1Android的特性应用框架,让一些基础设施得以重用Dalvik虚拟机,专为开发移动程序优化集成的浏览器,(基于WebKit引擎)优化的图形库,(2D图形库以及基于OpenGLES1.0规范的3D图形库)SQLite,用于结构化数据的存储,是一个数据库多媒体支持,支持多种音频,视频格式(MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF)GSM技术(依赖具体硬件)Bluetooth,EDGE,3G,WiFi(依赖具体硬件)Camera,GPS,compass,accelerometer(依赖具体硬件)丰富的开发环境(DEBUG工具,内存及性能工具,Eclipse的插件等)1.2Android的架构Android操作系统的模块如下:应用:Android已集成了一些应用,如邮件客户端,SMS程序,日历,地图,浏览器等应用框架:程序库:例行程序Linux内核2Andvoid起步2.1开发环境配置使用Eclipse+AndroidDevelopmentTools(ADT)插件。在HelpSoftwareUpdatesFindandInstall....中键入更新地址:运行第一个Andvoid程序使用Eclipse插件1、建立的工程类型为:AndvoidProject2、建立LaunchConfiguration.RunOpenRunDialog...orRunOpenDebugDialog命令行运行程序1、创建工程activityCreatoryour.package.name.ActivityName2、编译。在build.xml所在的目录ant一下。3、启动模拟器.运行命令:emulator4、在模拟器中,切换到主屏幕。5、在命令行输入:adbinstallmyproject/bin/appname.apk将其上载至模拟器。6、在模拟器中选择程序并启动。Android需要专门的编译工具来正确的编译资源文件和Android程序的其他部分。基于此,你需要为你的程序准备一个专门的编译环境。Andorid的编译过程通常包括编译XML和其他资源文件、创建正确的输入格式。经过编译的Android程序是一个.apk文件,.apk文件是一个压缩文件,它其中包含了.dex文件、资源文件、rawdata文件和其他文件。Andoriod暂时还不支持用本地代码(C/C++)开发第三方程序。移除Andorid程序要移除你安装在模拟器上的程序,你需要通过runadb并删除相应的.apk文件。通过adbshell命令在模拟器上打开一个UNIXshell,进入目录data/app/,通过命令rm你程序的名称.apk来移除文件。2.3调试程序Andvoid用于调试的手段有:DDMS,DDMS是一个图形化的程序,支持端口转发(因此你可以在程序中设置断点),支持模拟器上的截屏,支持线程和堆栈信息和其他的一些特性。Logcat,Dump一份系统消息的日志。这些消息包括模拟器抛出错误时的堆栈跟踪。AndroidLog,打印日志的类,用来将消息写入模拟器上的日志文件中。如Log.v()用于打印verbose级别的日志Traceview,Android可以保存一个日志用来记录被调用的方法以及该方法被调用的次数,通过Traceview你可以在一个图形化的界面中查看这个日志文件。可接解设置emulator的设置以方便调试,模拟器上调试和测试的设置Android提供了众多的设置使你可以更容易的调试和测试程序。要进入开发设置页面,在模拟器中转到DevToolsDevelopmentSettings。在该设置页面有以下选项:Debugapp:选择要调试的程序。你不需要设定其关联至调试器,但是设定这个值有两个效果:o在调试的时候,如果你在一个断点处暂停了过长的时间,这个设定会防止Android抛出一个错误o这个设定使你可以选择“等待调试器”选项,使程序只有在调试器关联上之后才启动WaitforDebugger:阻塞所选的程序的加载直到有调试器关联上,这样你就可以在onCreate()中设置断点,这对于调试一个Activity的启动进程是非常重要的。当你对该选项进行了更改,任何正在运行的程序的实例都会被终止。你只有在上面的选项中选择了一个调试程序才能够选中该选项。你一也可以在代码中添加waitForDebugger()来实现同样的功能。Immediatelydestroyactivities:告诉系统一旦一个activity停止了就销毁该activity(例如当Android释放内存的时候)。这对于测试代码onFreeze(Bundle)/onCreate(android.os.Bundle)是非常有用的,否则会比较困难。如果你的程序没有保存状态,那么选择这个选项很可能会引发很多问题。Showscreenupdates:对于任何正在被重绘的screensections都会在其上闪现一个粉红色的矩形。这对于发现不必要的screen绘制是很有必要的。ShowCPUusage:在屏幕上方显示CPU信息,显示有多少CPU资源正在被使用。上方红色条显示总的CPU使用率,它下方绿色的条显示CPU用在compositingthescreen上的时间。注意:在没有重启模拟器之前,一旦你开启了该功能就不能关闭。ShowscreenFPS:显示当前的帧率。这对于查看游戏达到的总的帧率是非常有用的。注意:在没有重启模拟器之前,一旦你开启了该功能就不能关闭。Showbackground:当没有activityscreens可见时,显示一个背景模式。一般是不会出现的,仅仅在Debug的时候会出现。设定的选项在模拟器重启之后仍然有效,如果要取消设定的选项,在取消设定以后还要重启模拟器,才能生效。2.4andvoid中的概念一个andvoid应用包括四个部分:Activity活动(个人认为:类似于JSP,也相当于SWT中的Shell,View则相当于wegiet)IntentReceiver(个人认为:类似于Strutsaction)Service(个人认为:类似于Servlet)ContentProvider(个人认为:用于持久化)用上面哪些组件,要在AndroidManifest.xml文件中声明。1、Activity.一个activity是应用中的一个单一的屏幕,它继承自Activity类,它将显示由Views组成的UI以及响应事件。(个人理解,相当于JSP)2、Intent与IntentFilters.Intent用于从一个屏幕跳到别一个屏幕,描述一个应用想做什么,它的数据结构包括action与data两部分,action如MAIN、VIEW、PICK、EDIT等等,data被表达成一个URI;IntentFilter相当于告诉跳到哪个activity,;IntentReceiver用于响应事件,虽然它不显示UI,但它可以用NotificationManager去通知用户。它需要在AndroidManifest.xml文件中注册,或者是用Context.registerReceiver()硬编码。3、Service是一段有生命周期的无UI的代码。4、ContentProvider,持久化,例如存储在文件系统中,或者存储在SQLite数据库中。2.5例子1,下载例子工程。例如:Notepadv1工程是问题工程,Notepadv1Solution则是相应的解决工程。2,3个例子的函义如下:通过练习11.数据库对象的例子程序2.如何在一个Activity初始化的时候创建数据库对象3.如何为一个Activity创建一个pop菜单4.如何得到一个用户在POP菜单中选择的ITEM的ID5.如何向一个ListView中写入数据通过练习21.如何取得数据集中被选择数据行的ID,注意rows是java的一个listarray对象,所以它有它的getSelection()的方法2.如何调用一个SubActivity以及在调用一个SubActivity之前应该做些事情。3.要实现一个方法,当SubActivity返回后,应该做些什么4.关于layout。由于Android采用MVC的模式,所以屏幕的布局采用了XML进行定义。一个好的布局会让程序显的更漂亮。可以参考,有很多的布局模式可供利用。5.如何创建一个开始的时候代码中不含onCreate()的类,因为到目前为止还没有创建过自己的类,以前看到的类和修改的方法都是已经写好的了。不过这个类也是一个从android.app.Activity继承的。创建后还是要通过SourceOverride一个onCreate的6.从一个SubActivity返回时,在返回之前应该做哪些事情7.如何在AndroidManifest.xml中声明一个新的Activity8.如何创建一个内部隐含的onClickLister及实现其应有的功能。通过练习31.除了onCreate()还有哪些和lifecycle有关的方法a.onFreeze():b.onPause()c.onResume()等等…2.大部分程序都有必要考虑lifecycle的问题,应该把下面的这个图记住:3.为了不丢失需要保存的信息,要明确的理解Activity的各个状态,并相应的给出在各个状态的行为。4.开始的时候对于onFreeze()和onPause()有些理解上的困难,要多读几遍DOC来会理解。通过额外练习进一步的理解lifecycle和通过手机按键进行操作时的时间和程序状态关系另外,SDK目录下也有一些例子。练习目标:1.使用ListActivities,并使用菜单2.学习使用操作SQLite数据库3.使用ArrayAdapter绑定数据到ListView中4.掌握一些基本的操作,如菜单的显示,菜单命令的处理,增加数据项等。第一步:在SDK中下载获得Notepadv1的代码,并导入到Eclipse中。导入步骤:a.在PackageExplorer中,右键选择Import.../General/ExistingProjectsintoWorkspaceb.点Browse按钮,选择Notepadv1的目录,并点OKc.你将会看到Notepadv1被列在项目区中,默认会被打勾,如果没有打勾,请手动勾上。d.点Finishe.Notepadv1将被列在PackageExplorer中f.如果有提示关于AndroidManifest.xml的错误,请选中此项目,并右键选择AndroidTools-FixProject,他将会自动帮你修复错误。第二步:看一下数据库操作类:DBHelper,还是比较简单的,自己看去:)。第三步:打开res/layout/no