OPhone应用编程作者:TD产业联盟日期:2010-09主要内容OPhone应用程序基本概念OPhone图形单位通用布局对象Layout菜单和基本控件Activity间切换和数据传递IntentFilter和ServiceOPhoneWidgetOPhone动画OPhone性能以及ANROPhone应用程序基本概念OPhone应用程序基本概念•组成OPhone应用程序的主要组件-Activity-IntentReceiver-Service-ContentProviderOPhone应用程序基本概念Activity•指单一的、集中的事情或者任务。•一般都从基类Activity扩展而来。•在一个程序里是单一的一个屏幕。•显示一个屏幕的UI,和用户进行交互并响应用户输入事件。•有两个常用的方法:-onCreate(Bundle):初始化Activity,设置UI元素…。-onPause():离开Activity界面。•通过启动其它的Activity实现屏幕之间的切换。•所有的Activity由系统的Activity栈管理,新创建的Activity在栈的最上面。•每个Activity有4个状态:active/running,paused,stopped,killed/shutdownOPhone应用程序基本概念•Activity工作流程OPhone应用程序基本概念•Intent指目的、意图,是将要执行操作的抽象描述,大多数情况下用于启动其他的Activity,是Activity之间的粘合剂。•IntentFilter描述了一个Activity能够处理什么样的Intent,该Activity对什么样的Intent和Action有兴趣。通过调用startActivity(dstIntent)方法实现在Activity之间导航。OPhone应用程序基本概念•IntentReceiverIntent接收器,用于执行具体的工作和响应外部事件,比如来电、闹钟、提醒等。•Service在后台运行的应用程序,一般没有UI界面,不能和用户进行交互,提供某种具体服务,一般从Service继承。•ContentProvider主要用于和其它的应用程序进行数据共享。OPhone应用程序基本概念应用程序的生命周期•每一个Android应用程序运行在自己的Linux进程中。•进程的生命周期不能被自己直接管理。而是由系统管理,这取决于应用程序的功能和重要性以及系统的可用内存。•组件(Activity,Service,IntentReceiver)会影响应用程序的生命周期。•应用程序是否被关闭取决于它运行的组件的重要性等级以及这些组件的状态。OPhone应用程序基本概念OPhone进程的重要性等级•1.前台进程,需要和用户进行交互,比如运行在屏幕最上面的Activity。•2.可见进程,Activity是可见的但是不在前台处于onPause状态,比如在一个Activity前面显示一个确认对话框。•3.服务进程,运行着一个服务,但并不可见,比如媒体播放器、网络的上传下载。•4.后台进程,本身拥有一个Acitvity处于onStop状态,当系统需要内存时很可能先关闭这样的进程•5.空进程,本身不拥有任何活动的组件,会被优先关闭。OPhone应用程序基本概念常用的Android包•Android.util包含常用的实用类,比如Log,XML等。•Android.os提供基本的操作系统服务,消息传递,内部进程通信等。•android.graphics提过基本的图形图像操作,比如画线、显示位图等。•android.text,android.text.method,android.text.style,andandroid.text.util提供了丰富的文本处理工具,支持长文本和输入法等。•android.database提供了对数据库操作的底层API。•android.content提供了存取设备数据的各种服务,•android.view是系统和用户交互框架的核心。•android.widget提供了标准的用户接口元素,比如各种Button、List、Edit控件,以及提供Layout管理。•android.app提供了高层的应用程序模型和Activity的实现等。OPhone图形单位OPhone图形单位•Pixelspx像素,在Android中与物理屏幕实际像素关联,简写为”px”•Inchesin英尺,在Android中与物理屏幕实际英尺大小关联,简写为”in”•Millimetersmm毫米,在Android中与物理屏幕实际毫米大小关联,简写为”mm”OPhone图形单位•Pointspt点,1英尺的1/72,与物理屏幕的尺寸相关,简写为”pt”•Density-IndependentPixelsdip密度独立像素,是一个基于物理屏幕密度的抽象单元。这些单元都与一个160dpi屏幕所关联,所以,一个dip就是1个像素在160dpi屏幕上的大小。Dip到pixel的比率与屏幕的密度有关系,但是不需要去直接处理比率问题。通常在使用这个单位时,都习惯写成”dip”避与”sp”混淆。OPhone图形单位•Scale-independentPixels比率独立像素,类似dip单元的含义,但是它的比率是根据用户的字体大小偏好来计算的。所以,强烈建议在制定字体大小时,使用此标量,因为一旦你指定了,字体大小将会被屏幕密度和用户的偏好比率所调整。简写为”sp”•以上提到的Dimension值可以在xml文件中申明,并且可以方便的被其它布局xml文件引用或者被代码访问。OPhone图形单位•实例说明Dimens.xml(res\valuses目录下):resourcesdimenname=one_pixel1px/dimendimenname=double_density2dp/dimendimenname=sixteen_sp16sp/dimen/resourcesJava中取得值:floatdimen=Resources.getDimen(R.dimen.one_pixel);XML文档中引用:TextViewandroid:layout_width=fill_parent“android:layout_height=wrap_contentandroid:textSize=@dimen/sixteen_sp/通用布局对象Layout通用布局对象Layout•FrameLayout•LinearLayout•TableLayout•AbsoluteLayout•RelativeLayout通用布局对象LayoutFrameLayout•最简单的布局对象•在屏幕上作为一个空的保留空间,可以使用一个单一对象填充它。•所有子元素都固定在屏幕的左上角•不能为其中的一个子元素指定一个位置。通用布局对象Layout•FrameLayout实例?xmlversion=1.0encoding=utf-8?FrameLayoutxmlns:android=:layout_width=fill_parentandroid:layout_height=fill_parentandroid:background=#ffeeeeaaandroid:padding=30dipImageViewandroid:layout_width=fill_parentandroid:layout_height=fill_parentandroid:src=@drawable/a/TextViewandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:background=#AA000000android:textColor=#ffffffffandroid:text=toptext//FrameLayout通用布局对象LayoutLinearLayout•所有子元素沿着一个方向排列,水平方向或者垂直方向。•所有的子元素都被堆放在其它元素之后,因此一个垂直列表的每一行只会有一个元素,而不管他们有多宽,而一个水平列表将会只有一个行高(高度为最高子元素的高度加上边框高度)。•LinearLayout保持子元素之间的间隔以及互相对齐(相对一个元素的右对齐、中间对齐或者左对齐)通用布局对象LayoutLinearLayout实例?xmlversion=1.0encoding=utf-8?LinearLayoutxmlns:android=:orientation=verticalandroid:layout_width=fill_parentandroid:layout_height=fill_parentTextViewandroid:layout_width=fill_parentandroid:layout_height=wrap_contentandroid:textSize=40spandroid:text=top/EditTextandroid:layout_width=fill_parentandroid:layout_height=wrap_contentandroid:text=middle/Buttonandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=bottom//LinearLayout通用布局对象LayoutTableLayout•每个子元素都分配到行和列中。•不会显示行列的边界线。•表格允许单元格为空,单元格不能跨列。通用布局对象Layout•TableLayout实例?xmlversion=1.0encoding=utf-8?TableLayoutxmlns:android=:layout_width=fill_parentandroid:layout_height=fill_parentTableRowTextViewandroid:text=a11“android:padding=3dip/TextViewandroid:text=a12android:padding=3dip//TableRowTableRowTextViewandroid:text=a21android:padding=3dip/TextViewandroid:text=a22android:padding=3dip//TableRow/TableLayout通用布局对象LayoutAbsoluteLayout•可以让子元素指定准确的x/y坐标值,并显示在屏幕上。(0,0)为左上角,当向下或向右移动时,坐标值将变大。•AbsoluteLayout没有页边框,允许元素之间互相重叠。•通常不推荐使用AbsoluteLayout,除非有正当理由要使用它,因为它使界面代码太过刚性,在不同分辨率的设备上可能不能很好地工作。通用布局对象Layout•AbsoluteLayout实例?xmlversion=1.0encoding=utf-8?AbsoluteLayoutxmlns:android=:backgroun