《移动操作系统应用与开发》期末复习.docx
《《移动操作系统应用与开发》期末复习.docx》由会员分享,可在线阅读,更多相关《《移动操作系统应用与开发》期末复习.docx(16页珍藏版)》请在冰点文库上搜索。
![《移动操作系统应用与开发》期末复习.docx](https://file1.bingdoc.com/fileroot1/2023-5/7/124cb25b-f34a-41d1-b491-be7cf826638a/124cb25b-f34a-41d1-b491-be7cf826638a1.gif)
《移动操作系统应用与开发》期末复习
《移动操作系统应用与开发》期末复习
题型:
选择题(有单选,有多选,每个小题后面有表明)10个题
填空题10个空
简答题4个题
程序题1个大题
复习重点:
第零讲和第一讲:
Android的特点
特点1:
•应用框架可以重复使用,其组件也可以更换。
•Dalvik虚拟机针对移动设备进行了优化。
•优化的图形能力支持2D、3D图形(OpenGLES1.0)。
•集成了基于开源WebKit引掣的浏览器。
•SQLite作为结构化数据存储。
特点2:
•多媒体支持多种音频、视频格式。
•支持蓝牙Bluetooth,3G和WiFi
•支持照相机、GPS、指南针和加速度仪等传感器硬件。
•丰富的开发环境。
包括模拟机、调试工具、内存运行检测,以及为EclipseIDE所写的插件。
AndroidLibraries有哪些?
C/C++库:
被各种Android组件使用,通过应用程序框架开发者可以使用
媒体库:
编码格式包括MPEG4H.264MP3JPGPNG.....
SurfaceManager:
对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。
LibWebCore:
Web浏览器引擎
SGL:
底层的2D图形引擎。
2D,3Dlibraries图形库、引擎
WebKit
基于开源WebKit的浏览器
支持CSS、Javascript、DOM、Ajax
多媒体框架
基于PacketVideoOpenCORE平台
支持标准音频、视频
SQLite关系数据库引擎轻型数据库,支持多种平台
FreeType:
位图和矢量字体显示。
Android虚拟机与Java虚拟机
Android虚拟机:
DVM
Java虚拟机:
JVM
区别:
Dalvik和标准Java虚拟机(JVM)的差别
Dalvik更适合手机所用的嵌入式环境,占用内存少。
JVM通用Java虚拟机。
Dalvik虚拟机特点
Dalvik允许在有限的内存中同时运行多个虚拟机实例。
每一个Dalvik应用作为一个独立的Linux进程执行。
独立进程可防止在虚拟机崩溃的时候所有程序都被关闭。
Dalvik提供了一个拥有较Java少限制许可证的平台。
Android工程目录下主要文件和主要文件夹的作用
R.java文件:
由eclipse自动生成,应用开发者不需要修改里面的内容。
里面的内容的修改也是由eclipse自动来处理的。
在这个文件中Android对下面即将介绍的资源进行了全局索引。
res文件中内容发生任何改变,R.java都会重新编译,同步更新。
AndroidLibrary:
应用程序运行的库。
assets目录:
主要放置多媒体等一些文件。
res目录:
放置应用程序用到的资源,主要包含三个文件:
drawable目录:
放置图片资源。
layout目录:
放置布局文件。
这些布局文件都是xml文件。
AndroidManifest.xml:
这个文件相当重要,是应用的配置文件。
在这个文件里面,必须声明应用的名称,应用所用到的Activity,Service,以及receiver等。
第二讲:
几种AndroidUI常用的布局及特点
常用布局:
AbsoluteLayout
FrameLayout
GridView
LinearLayout
ListLayout
RadioGroup
TableLayout
线性布局LinearLayout:
垂直:
android:
orientation="vertical“
水平:
android:
orientation="horizontal"
FrameLayout:
在屏幕上故意保留的空白空间,可以填充一个单独的对象。
所有子元素都钉到屏幕的左上角
不能为子元素指定位置
TableLayout
子元素放入到行与列中
不显示行、列或是单元格边界线
单元格不能横跨行,如HTML中一样
AbsoluteLayout
指明子元素确切的屏幕(X,Y)坐标
(0,0)是左上角,下移或右移时,坐标值增加
允许元素重叠(但是不推荐)
注意:
一般建议不使用AbsoluteLayout除非你有很好的理由来使用它
因为它相当严格并且在不同的设备显示中不能很好地工作
RelativeLayout
让子元素指定它们相对于其他元素的位置(通过ID来指定)或相对于父布局对象,跟AbsoluteLayout这个绝对坐标布局是个相反。
在RelativeLayout布局里的控件包含丰富的排列属性:
Layoutabove:
控件在指定控件的上方
Layoutbelow:
控件在指定控件的下方
Layouttoleftof:
控件在指定控件的左方
使用RelativeLayout布局的时候,尽少程序运行时做控件布局的更改,因为RelativeLayout布局里面的属性之间,很容易冲突。
第三讲:
如何给应用程序添加菜单及菜单的事件响应?
(1)首先设置ItemId:
publicclassActivityMenuextendsActivity{
publicstaticfinalintITEM0=Menu.FIRST;
publicstaticfinalintITEM1=Menu.FIRST+1;
(2)创建菜单:
publicBooleanonCreateOptionsMenu(Menumenu){
super.onCreateOptionsMenu(menu);
menu.add(0,ITEM0,0,“显示button1”);
menu.add(0,ITEM1,1,“显示button2”);
returntrue;}
(3)菜单项的响应函数:
publicbooleanonOptionsItemSelected(MenuItemitem){
switch(item.getItemId()){
caseITEM0:
actionClickMenuItem1();
break;
caseITEM1:
actionClickMenuItem1();break;}
returnsuper.onOptionsItemSelected(item);}
(4)具体函数中,设置按钮可见属性的是:
button1.setVisibility(View.VISIBLE);
button1.setVisibility(View.INVISIBLE);
第四讲:
Spinner是如何显示的?
数据是如何添加的?
(1)main.xml中添加Button
(2)mainActivity.java中添加事件响应
2、新建一个布局spinner.xml
3、新建一个spinnerActivity.java文件并与spinner.xml相关联
4、在AndroidManifest.xml中记录一下新建的spinnerActivity
第一种实现Spinner内容的方法
1.在编程的时候载入列表数据。
首先定义一下需要载入的数据;
然后在onCreate方法中调用find_and_modify_view()来载入数据。
另外andorid也提供了两种基本的样式
android.R.layout.simple_spinner_item:
TextView的下拉菜单
android.R.layout.simple_spinner_dropdown_item:
右边带有radio的下拉菜单
2.在xml文件中预先定义数据。
在spinner.xml这个模板中添加Spinner组件,在SpinnerActivity.java中初始化其值。
第五讲:
ListView实验之重点把握ListView2
看代码
把握常用的几个ListView数据适配器
列表适配器数据元素的类型
ListViewAdapterData
ListView1ArrayAdapter数组String
ListView2SimpleAdapterArrayListMap
ListView3使用了ListActivity类
ListView4选项被选中的事件处理
第六讲:
SharedPreference和SQLite分别是做什么用的?
SharedPreference:
用来存储一些简单的配置信息的一种机制。
SQLite:
嵌入式开发的首选数据库;有服务器进程。
用一个数据库连接就行,可以不关闭连接。
一个SQLite数据库,就是一个文件;跨平台,可以自由复制;占用资源非常低
把握SharedPreference的例子实验。
ContentProvider和ContentResolver的作用
ContentProvider提供共享的数据
ContentResolver使用共享的数据
Android访问SQLite的主要API(相关类的作用)
SQLiteDatabase—提供了打开或创建数据库和操作数据的各种方法
SQLiteOpenHelper--为数据库的创建、打开和版本管理提供帮助
ContentValue-----负责存放一些名值对,名是String类型,值是基本类型
Cursor----在Android当中是一个非常有用的接口,通过Cursor我们可以对从数据库查询出来的结果集进行随机的读写访问。
SimpleCursorAdapter------负责把Cursor中的数据填充到ListView当中
第七讲:
应用程序显示notification的步骤
一般需要用到两个类Notification和NotificationManager。
使用步骤如下:
1、获得NotificationManager的实例:
NotificationManagermNotificationManager=
(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
2、给即将定义的Notification定义一个ID,如:
privatestaticintNOTIFICATIONS_ID=R.layout.activity_notification;
每一个显示的Notification都有唯一的ID
3、获得Notification的一个实例化对象:
Notificationnotification=newNotification(drawable,tickerText,System.currentTimeMillis());
4、通过Notification的方法
setLatestEventInfo(Contentcontext,CharSequencecontentTitle,CharSequencecontentText,PendingIntentcontentIntent)来设置Notification展开时的特性。
例如:
PendingIntentcontentIntent=PendingIntent.getActivity(this,0,
newIntent(this,ActivityMain.class),0);
notification.setLatestEventInfo(this,title,content,contentIntent);
5、由NotificationManager发出Notification.
mNotificationManager.notify(NOTIFICATIONS_ID,notification)
补充方法:
如何由NotificationManager取消Notification?
mNotificationManager.cancel(NOTIFICATIONS_ID);
第八讲:
Dialog基本概念及基本知识点
Dialog类是一切对话框类的基类。
Dialog类虽然可以在界面上显示,但是并非继承自View类,而是直接继承自java.lang.Object
它的生命周期由Activity来维护,Activity负责生成、保存和恢复它。
在Activity当中用户可以主动调用的函数为:
showDialog(intid)
dismissDialog(intid)
onPrepareDialog(intid,Dialogdialog)方法,是当Dialog生成但是没有显示出来的时候,使得有机会在显示前对Dialog做一些修改,如对Dialog标题的修改。
生成Dialog的一般步骤
Activities提供了一种方便管理的创建、保存、回复的对话框机制,例如 onCreateDialog(int),onPrepareDialog(int,Dialog),showDialog(int),dismissDialog(int)等方法,如果使用这些方法的话,Activity将通过getOwnerActivity()方法返回该Activity管理的对话框(dialog).
onCreateDialog(int):
当你使用这个回调函数时,Android系统会有效的设置这个Activity为每个对话框的所有者,从而自动管理每个对话框的状态并挂靠到Activity上。
这样,每个对话框继承这个Activity的特定属性。
比如,当一个对话框打开时,菜单键显示为这个Activity定义的选项菜单,音量键修改Activity使用的音频流。
showDialog(int):
当你想要显示一个对话框时,调用showDialog(intid)方法并传递一个唯一标识这个对话框的整数。
当对话框第一次被请求时,Android从你的Activity中调用onCreateDialog(intid),你应该在这里初始化这个对话框Dialog。
这个回调方法被传以和showDialog(intid)相同的ID。
当你创建这个对话框后,在Activity的最后返回这个对象。
onPrepareDialog(int,Dialog):
在对话框被显示之前,Android还调用了可选的回调函数onPrepareDialog(intid,Dialog).如果你想在每一次对话框被打开时改变它的任何属性,你可以定义这个方法。
这个方法在每次打开对话框时被调用,而onCreateDialog(int)仅在对话框第一次打开时被调用。
如果你不定义onPrepareDialog(),那么这个对话框将保持和上次打开时一样。
这个方法也被传递以对话框的ID,和在onCreateDialog()中创建的对话框对象。
dismissDialog(int):
当你准备关闭对话框时,你可以通过对这个对话框调用dismiss()来消除它。
如果需要,你还可以从这个Activity中调用dismissDialog(intid)方法,这实际上将为你对这个对话框调用dismiss()方法。
如果你想使用onCreateDialog(intid)方法来管理你对话框的状态(就如同在前面的章节讨论的那样),然后每次你的对话框消除的时候,这个对话框对象的状态将由该Activity保留。
如果你决定不再需要这个对象或者清除该状态是重要的,那么你应该调用removeDialog(intid)。
这将删除任何内部对象引用而且如果这个对话框正在显示,它将被消除。
第九讲:
获取Activity返回值的方法
获取子Activity的返回值,一般可以分为以下三个步骤
1.以Sub-Activity的方式启动子Activity
调用startActivityForResult(Intent,requestCode)函数,参数Intent用于决定启动哪个Activity,参数requestCode是唯一的标识子Activity的请求码
显式启动子Activity的代码如下
intSUBACTIVITY1=1;
Intentintent=newIntent(this,SubActivity1.class);
startActivityForResult(intent,SUBACTIVITY1);
隐式启动子Activity的代码如下
intSUBACTIVITY2=2;
Uriuri=Uri.parse("content:
//contacts/people");
Intentintent=newIntent(Intent.ACTION_PICK,uri);
startActivityForResult(intent,SUBACTIVITY2);
2.设置子Activity的返回值
在子Activity调用finish()函数关闭前,调用setResult()函数将所需的数据返回给父Activity
setResult()函数有两个参数,结果码,返回值。
结果码:
表明了子Activity的返回状态,通常为Activity.RESULT_OK或者Activity.RESULT_CANCELED,或自定义的结果码,结果码均为整数类型
返回值:
用封装在Intent中,子Activity通过Intent将需要返回的数据传递给父Activity。
数据主要是Uri形式,可以附加一些额外信息,这些额外信息用Extra的集合表示。
下面代码说明如何在子Activity中设置返回值
Uridata=Uri.parse("tel:
"+tel_number);
Intentresult=newIntent(null,data);
result.putExtra("address","");
setResult(RESULT_OK,result);
finish();
3.在父Activity中获取返回值
当子Activity关闭时,启动它的父Activity的onActivityResult()函数将被调用;如果需要在父Activity中处理子Activity的返回值,则重载此函数即可
此函数的语法如下
publicvoidonActivityResult(intrequestCode,intresultCode,Intentdata);
第1个参数requestCode,用来表示是哪一个子Activity的返回值
第2个参数resultCode用于表示子Activity的返回状态
第3个参数data是子Activity的返回数据,返回数据类型是Intent。
根据返回数据的用途不同,Uri数据的协议则不同,也可以使用Extra方法返回一些原始类型的数据
下面代码说明如何在父Activity中处理子Activity的返回值
privatestaticfinalintSUBACTIVITY1=1;
privatestaticfinalintSUBACTIVITY2=2;
publicvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
Super.onActivityResult(requestCode,resultCode,data);
switch(requestCode){
caseSUBACTIVITY1:
if(resultCode==Activity.RESULT_OK){
UriuriData=data.getData();
}elseif(resultCode==Activity.RESULT_CANCEL){
}
break;
caseSUBACTIVITY2:
if(resultCode==Activity.RESULT_OK){
UriuriData=data.getData();
}
break;
}
}
广播事件和接收事件的一般方法
广播事件
构造一个Intent,然后调用sendBroadcast进行广播:
例如:
publicstaticfinalStringNEW_BROADCAST=“com.eoe.action.NEW_BROADCAST”
Intentintent=newIntent(NEW_BROADCAST);
sendBroadcast(intent);
接收事件
1.实现一个类继承自BroadcastReceiver,并重写此类中的onReceive方法。
例如:
PublicclassMyReceiverextendsBroadcastReceiver{
PublicvoidonReceive(Contextcontext,Intentintent){….}
}
2.注册BroadcastReceiver(主要是设置对哪些Intent进行监听?
)
例如:
name=“MyReceiver">
android:
name="=“com.eoe.action.NEW_BROADCAST"/>
第十讲:
Service有什么作用?
service服务是运行在后台的一段代码。
它可以运行在它自己的进程,也可以运行在其他应用程序进程的上下文(context)里面,这取决于自身的需要。
其它的组件可以绑定到一个服务(Service)上面,通过远程过程调用(RPC)来调用这个方法。
Service的两种使用方法?
启动方式:
通过调用Context.startService()启动Service,通过调用Context.stopService()或Service.stopSefl()停止Service
绑定方式:
通过服务链接(Connection)或直接获取Service中状态和数据信息
绑定方式特点:
服务链接能够获取Service的对象,因此绑定Service的组件可以调用Service中的实现的函数
使用Service的组件通过Context.bindService()建立服务链接,通过Context.unbindService()停止服务链接
如果在绑定过程中Service没有启动,Context.bindService()会自动启动Service
同一个Service可以绑定多个服务链接,这样可以同时为多个不同的组件提供服务Service的生命周期:
1.startService后,即使调用startService的进程结束了Service仍然还存在,直到有进程调用stopService,或者Service自己自杀(stopSelf())就没法了
2.bindService后,Service就和调用bindService的进程同生共死了,也就是说当调用bindService的进程死了,那么它bind的Service也要跟着被结束,当然期间也可以调用unbindservice让