安卓应用开发(中级)-课后练习答案_第1页
安卓应用开发(中级)-课后练习答案_第2页
安卓应用开发(中级)-课后练习答案_第3页
安卓应用开发(中级)-课后练习答案_第4页
安卓应用开发(中级)-课后练习答案_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目1一、填空题1.在Kotlin中,对于以下表达式,当a=2时,s的值是a<=2。vals=if(a>2)"a>2"else"a<=2"2.在Kotlin中,表达式6/5的值是1,6%5的值是1,6.0/5的值是1.0。3.在Kotlin中,valx:Int=15;valy:Int=6;valc=(x/y);c的值是2。4.在Kotlin中,x能同时被m和n整除的表达式为if(x%m==0&&x%n==0)。5.在Kotlin中,x能被m或n整除的表达式为if(x%m==0||x%n==0)。6.在Kotlin中,vali=10;vals="i=$i";s的值为i=10。7.在Kotlin中,函数的可变长参数可以用vararg关键字进行标识。8.在Kotlin中,表达式for(iin1..4step2)print(i)输出的结果是13。9.在Kotlin中,通过在类名前添加annotation来声明注解。10.Kotlin中的四种元注解分别是:@Target、@Retention、@Repeatable、@MustBeDocumented。二、判断题1.Kotlin中有8大基本数据类型。(错)2.Java代码和kotlin代码可以互相转换。(对)3.在Kotlin中定义常量用var。(错)4.在Kotlin中,没有switch关键字。(对)5.Kotlin类可以包含:构造函数和初始化代码块、函数、属性、内部类、对象声明。(对)6.Kotlin的编译器支持自动类型判断,即声明时可以不指定类型,由编译器判断。(对)7.在Kotlin中,变量与常量在定义的时候可以不用赋初始值,但是在使用前一定要初始化。(对)8.Kotlin中的协程(Coroutine)是运行在单线程中的并发程序。(对)三、简答题1.在Kotlin中,请写出if、if-else、when三种分支结构的语法格式。(1)if(条件表达式成立){}(2)if(条件表达式成立){}else{}(3)when(变量){值1->表达式1值2->表达式2~......else->表达式3}在Kotlin中,请写出while、do-while、for三种循环结构的语法格式。(1)while(表达式成立){}(2)do{}while(表达式成立)(3)for(表达式1;表达式2;表达式3){}协程与传统线程相比,有什么优点?(1)减少了线程切换的成本。Java中的线程,不管是创建还是切换,都需要较高的成本。子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。这也就是...(2)协程的第二大优势就是,不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态。(3)协程更轻量级。创建一个线程栈大概需要1M左右,而协程栈大概只需要几K或者几十K。四、编程题1.用Kotlin编程输出下列数据序列的最大值及其下标:38,-9,12,29,-8,15,76,3。funmain(args:Array<String>){varlist=arrayOf(-9,38,12,29,-8,15,76,3);varmax=list[0]varindexTmp=0;for(indexinlist.indices){if(max<list[index]){max=list[index]indexTmp=index}}println(max)println(indexTmp)}2.用Kotlin定义一个矩形类,提供长、宽属性,提供计算面积和周长的方法。classRectange{varw=0.0varh=0.0constructor(){}constructor(w:Double,h:Double){this.w=wthis.h=h}funcalS():Double{returnw*h}funcalL():Double{return2*(w+h)}}3.对于上题中的矩形类,写出通过反射技术获取其对象的成员变量和成员方法的代码。funmain(){//获取对应的KClassvarclass1=Class.forName("Rectange").kotlin//创建Rectang对象varobj1=class1.createInstance()//获取Rectange类的字段集合varpropertys=class1.declaredMemberProperties//输出obj1对象中属性名称为name的字段的值propertys.forEach{when(){"w"->{println("w="+it.getter.call(obj1))}"h"->{println("h="+it.getter.call(obj1))}}}//获取Rectange类的方法集合varmethods=class1.declaredFunctions//迭代遍历每一个方法,并听过对象obj1调用methods.forEach{when(){"calS"->{it.call(obj1)}"calL"->{it.call(obj1)}}}}项目2一、单选题1.设置线性布局的方向使用哪个属性?(A)A、android:orientationB、android:gravityC、android:layout_gravityD、android:layout_width2.若将线性布局设为从左到右排列,android:orientation的值应该是(B)。A、verticalB、horizontalC、centerD、left3.上图线性布局中,若要使三个文本框在水平方向上的宽度各占1/3,如下图所示,应该设置哪些属性?(C)A、设置三个控件的宽度为0B、设置三个控件的宽度为具体的像素值C、设置三个控件的宽度为0,并且设置它们的权重为1D、设置三个控件的权重为14.在相对布局中,如何设置某控件位于父控件的水平居中位置(C)A、android:layout_centerVertical="false"B、android:layout_centerHorizontal="false"C、android:layout_centerHorizontal="true"D、android:layout_centerVertical="true" 5.如何设置某控件与控件A(控件A的id是“myId”)的左边对齐?(A)A、android:layout_alignLeft="@id/myId"B、android:layout_alignLeft="@+id/myId"C、android:layout_alignLeft="id/myId"D、android:layout_alignLeft="myId"二、填空题1.在android中,可视化控件通常可以分为两类,分别是View和ViewGroup。2.设置输入文本提示信息的属性是hint,请填写属性名。3.为了实现与单选按钮的交互,而为单选按钮实例添加监听器的方法名是setOnCheckedChangeListener。4.checked属性用来设置默认情况下复选按钮是否被选中。5.ImageView的scaleType属性用来设置图片缩放类型。三、简答题1.请简述RecyclerView的基本使用步骤。答:RecyclerView的基本使用步骤如下:(1)找到RecyclerViewRecyclerViewmRecyclerView=findView(R.id.id_recyclerview);(2)为RecyclerView设置布局管理器mRecyclerView.setLayoutManager(layout);(3)为RecyclerView设置数据适配器mRecyclerView.setAdapter(adapter)2.请简述实现一个自定义的RecyclerView.Adapter需要复写的3个方法的作用。答:需要复写的3个方法的作用如下:(1)onCreateViewHolder()方法:该方法用来创建ViewHolder的实例,加载Item布局。(2)onBindViewHolder()方法:该方法用来为ViewHolder绑定数据,即对每个item进行赋值操作。(3)getItemCount()方法:该方法用来获取item的数量。四、编程题1.编写一个用来展示水果信息的程序,要求使用RecyclerView。2.设计一个毕业生信息录入界面,要求尽可能地使用各种合适的控件。项目3一、单选题1.以IO流形式把数据存入手机内存或者SD卡属于以下哪种存储方式?(A)A、文件存储B、SharedPreferences存储C、SQLite数据库存储D、ContentProvider存储2.读取文件内容时使用(A)。A、输入流FileInputStreamB、输出流FileOutputStreamC、A和B都可以D、A和B都不可以3.存储数据到文件中时,MODE_PRIVATE的特点是(A)。A、写入的内容会覆盖原文件的内容。B、检查文件是否存在,存在就往文件末尾追加内容,否则就创建新文件。C、以上两项都是D、以上两项都不是4.往SQLite数据中添加记录的方法是(A)。A、insert()B、deleteC、updateD、query5.修改SQLite数据库中的记录的方法是(C)。A、insert()B、deleteC、updateD、query6.在SQLite数据库中查找记录的方法是(D)。A、insert()B、deleteC、updateD、query7.下列方法中,(B)方法是sharedPreferences获取其编辑器(Editor对象)的方法。A、getEdit()B、edit()C、setEdit()D、getAll()二、填空题1.SQLiteDatabase类封装了一系列SQLite数据库操作的API,可以对数据进行增删改查操作。请填写类名。2.在SQLite数据库查询过程中,在Cursor的内部封装了一个整数计数器,代表当前可以访问的行号。3.saveData方法用来保存数据到SharedPreferences,readData方法用来读取保存的数据,请完善程序。privatevoidsaveData(){Stringname=etName1.getText().toString();//获取用户输入的账号Stringpsw=etPsw1.getText().toString();//获取用户输入的密码SharedPreferencessp=getSharedPreferences("myfile",MODE_PRIVATE);SharedPreferences.Editoreditor=;//得到编辑器;//以账号为key,以密码为value保存数据;}privatevoidreadData(){Stringname=etName1.getText().toString();//获取用户输入的账号SharedPreferencessp=getSharedPreferences(,MODE_PRIVATE);StringstrPsw=;//根据账号取出密码}答:第一空:sp.edit()第二空:editor.putString(name,psw);第三空:mit();第四空:"myfile"第五空:sp.getString(name,"")三、编程题1.设计一个简易记事本,能将用户输入的文本内容保存到存储器中的txt文件中,帮能把txt文件的内容读取加载出来。2.设计一个水果信息库,能将水果信息保存在SQLite数据库中,并能将已经保存在数据库中的所有数据在界面列表中显示出来。项目4一、单选题1.(A)是指客户端发送请求后,处于阻塞状态,必须要等服务端返回信息后客户端才能进行后续的操作。A、同步通信B、异步通信C、A和B都是D、A和B都不是2.(B)一般通过多线程技术和回调函数实现。A、同步通信B、异步通信C、A和B都是D、A和B都不是3.下面的说法正确的是(D)。A、WebView内部实现是采用渲染引擎来展示view的内容。B、WebView可单独使用。C、WebView可以联合其他工具类一起使用。D、以上说法都正确。4.关于HttpURLConnection访问网络的基本用法,描述错误的是(C)。A、HttpURLConnection对象需要设置请求网络的方式B、HttpURLConnection对象需要设置超时时间C、需要通过new关键字来创建HttpURLConnection对象D、访问网络完毕需要关闭HTTP链接二、填空题1.Socket在基于TCP协议进行通信时,一般有三种方式种模式,分别是一对一、一对多和多对多。2.两个进程通过网络进行通信,必须知道对方的IP地址和port端口号。3.在包中提供了名为URL的类,通过该类可以从互联网获取网络资源。4.客户端请求web服务器一般有两种常见的方式,分别是get和post。5.WebView可以展示网页信息,可以理解为android中的一个微型浏览器。三、判断题1.HttpURLConnection用于发送HTTP请求和获取HTTP响应。(对)2.Android中要访问网络,必须在AndroidManifest.xml中注册网络访问权限。(对)3.GET请求如果要传递参数给服务器,不能在地址后面加上参数。(错)三、简答题1.请简述你对Socket一对一通信的理解。答:一对一通信是一台机器充当服务器,另外一台机器充当客户机,服务器首先处于监听状态,等待客户机的连接。在连接完成以后,可以通过io操作在服务器和客户端之间相互发送信息。2.请简述使用HttpURLConnection访问网络的步骤。答:使用HttpURLConnection访问网络的步骤如下:(1)构建URL对象。(2)通过URL对象的openConnection()方法获取HttpURLConnection对象。(3)调用setRequestMethod()方法设置http请求的方式。(4)通过setConnectTimeout()方法设置连接的超时时间。(5)从http响应信息中获取响应状态码(6)如果状态码为200,则调用getInputStream()方法获取服务器返回的输入流。(7)调用disconnect()方法关闭http连接。四、编程题使用WebView控件设计一个简易的浏览器,能根据用户输入的网址显示浏览的结果。项目5一、单选题1.下面代码描述的透明度动画,哪个选项的说明是正确的?(A)<alphaandroid:repeatMode="restart"android:repeatCount="infinite"android:duration="1000"android:fromAlpha="0.0"android:toAlpha="1.0"/>A、动画从透明变化到不透明B、动画从不透明变化到透明C、动画持续时间1000秒D、动画重播时从最后一帧开始播放2.Android中使用Canvas类中的(B)方法可以绘制椭圆。A、drawRectB、drawOvalC、drawCircleD、drawLine3.播放视频时,MediaPlayer需要与(D)配合使用。A、VideoViewB、MatrixC、SoundPoolD、SurfaceView4.以下哪种方法能用来判断音频/视频是否正在播放。(C)A、startB、pauseC、isPlayingD、stop二、填空题1.绘图时用来设置画笔颜色的是Paint类,填写类名。2.从指定位置开始播放音频需要调用MediaPlayer的seekTo方法。请写出方法名。3.在Android中,提供了4种补间动画,分别是透明度渐变动画、缩放动画、平移动画、旋转动画。三、判断题1.逐帧动画通过顺序播放排列好的图片来实现动画效果。(对)2.Android中开发音乐播放器可以使用MediaPlayer,开发视频播放器只能用VideoView。(错)3.SoundPool适合在应用程序中播放按键音或者消息提示音等短小的多个音频。(错)四、简答题请简述使用系统相机拍照流程。答:使用系统相机拍照流程如下:(1)声明使用相机的权限和外部存储设备的存取权限,并对权限进行动态申请。(2)创建一个动作为MediaStore.ACTION_IMAGE_CAPTURE的Intent对象,调用Intent的putExtra()方法指定照片输出路径,执行startActivityForResult()方法启动系统自带的拍照程序,即可使用摄像头进行拍照。五、编程题1.编写一个使用SurfaceView播放视频的程序,显示一个按钮,按钮的文字随着视频的播放和暂停,在“播放”和“暂停”之间切换。项目6一、选择题1.TencentLocationListener接口的(A)方法用于接收定位结果。A、onLocationChanged()B、onStatusUpdate()C、activate()D、deactivate()2.TencentLocationListener接口的(B)方法用于接收GPS、WiFi、Cell状态码。A、onLocationChanged()B、onStatusUpdate()C、activate()D、deactivate()3.LocationSource接口的(C)方法用于设置位置变化回调。A、onLocationChanged()B、onStatusUpdate()C、activate()D、deactivate()4.LocationSource接口的(D)方法用于取消位置变化回调。A、onLocationChanged()B、onStatusUpdate()C、activate()D、deactivate()二、填空题1.定位分为GPS定位、基站定位和WIFI定位三种方式。2.获取LocationManager对象,需要调用Context的getSystemService()方法。3.LocationProvider通常有三个,分别是:LocationManager.PASSIVE_PROVIDER、LocationManager.GPS_PROVIDER、LocationManager.NETWORK_PROVIDER。三、判断题1.使用腾讯地图服务,需要在AndroidManifest.xml文件的application标签里,添加名称为TencentMapSDK的meta,value值是申请的key。(对)2.创建地图视图之后,需要跟应用绑定生命周期。(对)四、简答题1.地图出现白屏和黑屏有可能是什么原因引起的?需要怎么处理?答:常见的白屏原因是地图正常绘制渲染,但内部资源没有被正常加载,请开发者检查一下网络、权限、存储是否正常。黑屏情况主要的可能原因是地图没有正常绘制渲染,此时请检查一下地图视图有没有正常绑定各个生命周期方法。2.简述腾讯地图的连续定位的实现过程。答:腾讯地图的连续定位的实现过程如下:(1)获取TencentLocationManager实例。(2)创建位置监听器TencentLocationListener,APP通过位置监听器接收定位SDK的位置变化通知。(3)构造TencentLocationRequest定位请求,APP通过向定位SDK发送定位请求来启动定位。(4)发起连续定位请求或单次定位请求。(5)停止定位。项目7一、选择题1.(A)类代表传感器。A、SensorB、SensorManagerC、SensorEventD、Context2. 传感器采用率定义在(B)类中?A、SensorB、SensorManagerC、SensorEventD、Context二、判断题1.要注册各种传感器需要先获取SensorManager对象。(对)2.为了减轻使用传感器耗电大的问题,可以设置当Activity可见时才使用传感器。当Activity不可见时,注销传感器。(对)三、简答题简述如何获取一个特定传感器的数据。答:获取一个特定传感器的数据的步骤如下:(1)获取传感器管理器sensorManager。(2)调用sensorManager的getDefaultSensor()方法能获取某类传感器。(3)调用sensorManager的registerListener()方法为传感器注册监听器,实现该方法的参数1(接口)。其中onSensorChanged()方法当传感器数据发生变化时回调。参数sensorEvent有一个类成员变量values,它是一个float数组,数组的数据根据传感器不同而不同。通过它就可以得到传感器的数据。四、编程题1.编写一个光照传感器的应用程序,根据光的强弱显示不同的界面背景颜色。项目8一、选择题1.利用Glide设置图片未加载完毕时默认显示的图片,使用(C)进行设置。A、withB、loadC、placeholderD、error2.利用Glide设置图片加载失败时显示的图片,使用(D)进行设置。A、withB、loadC、placeholderD、error3.利用Glide预加载图片时,使用(A)进行设置。A、preloadB、loadC、placeholderD、error4.利用Glide调整图片的大小时,使用(A)进行设置。A、overrideB、thumbnailC、withD、load5.利用Logger记录日志的时候,可以根据不同的日志级别来进行记录。记录一般信息使用的方法是(A)。A、Logger.i()B、Logger.e()C、Logger.w()D、Logger.d()6.把List中的元素放在方括号中输出,使用Logger的哪个方法?(D)A、Logger.json()B、Logger.xml()C、Logger.w()D、Logger.d()二、填空题1.Android常用网络框架包括okhttp、retrofit、volley等。2.volley框架的StringRequest请求返回的数据是String类型的。3.volley框架的JsonObjectRequest请求返回的数据是Json格式的数据。4.okhttp封装了线程池和数据转换,能有效提高性能。5.Android常用图片框架包括Picasso、Glide、Fresco等。6.第一次加载图片时,Picasso会比Glide快,而当缓存中已经有下载好的图片时,Glide显示图片比Picasso快。(填写Picasso或Glide)7.Glide图片质量上不如Picasso,但是Glide的内存消耗较小。(填写Picasso或Glide)三、判断题1.okhttp不支持异步请求。(错)2.retrofit是基于okhttp封装的网络请求框架。(对)3.volley能下载文件。(错)4.volley具有小图片的异步加载和缓存等功能。(对)5.volley适合数据量不大但是通信频繁的场景。(对)6.Fresco支持gif,图片加载效率高,但包很大,API不够简洁,用法复杂。(对)7.Glide比Picasso更加简洁和轻量,Picasso比Glide功能更为丰富。(错)8.Glide支持gif,Picasso不支持gif。(对)9.Glide只能加载网络图片。(错)10.Logger打印的日志不支持从日志跳转到源码。(错)11.Logger框架能够方便地控制日志是否输出。(对)四、简述题1.请简述Volley的使用步骤。答:Volley的使用步骤如下:(1)获取请求队列RequestQueuemRequestQueue=Vollay.newRequestQueue(Contextcontext);(2)获取请求RequestmRequest=newObjectRequest(…);ObjectRequest需要根据自己请求返回的数据来定制,Vollay已经为我们实现了StringRequest、JsonArrayRequest、JsonObjectRequest、ImageRequest请求。(3)把请求添加到请求队列中mRequestQueue.add(mRequest);2.请描述JsonObjectRequest构造方法的5个参数的含义。构造方法如下:JsonObjectRequest(intmethod,Stringurl,JSONObjectjsonRequest,Listener<JSONObject>listener,ErrorListenererrorListener)答:5个参数的含义如下:(1)method:用来设置请求的方式是GET或POST。(2)url:用来设置请求的地址。(3)jsonRequest:用来设置发出POST请求时的请求体。(4)listener:用来设置请求成功时的回调。(5)errorListener:用来设置请求失败时的回调。3.利用Glide加载网络图片时,以下代码块中的三个括号里需要填写什么内容?Glide.with().load().into();答:第一个括号:填写Context、Activity、Fragment、FragmentActivity、ApplicationContext中的任何一个。第二个括号:填写网络请求的地址。第三个括号:指定将图片显示在哪个ImageView控件中。五、编程题1.请写出解析JSON数据的主要逻辑代码。假定JSON格式的字符串已经保存在变量strJson中。JSON数据如下所示: [{"PostNumber":215001,"Province":"江苏省","City":"苏州市","Address":"廖家巷新光里"},{"PostNumber":215001,"Province":"江苏省","City":"苏州市","Address":"龙兴桥顺德里"}]答:使用JSONArray类解析JSON数据的逻辑代码如下:publicvoidgetJson(StringstrJson){JSONArrayjsonArray=null;try{jsonArray=newJSONArray(strJson);for(inti=0;i<jsonArray.length();i++){JSONObjectjsonObj=jsonArray.getJSONObject(i);intpostNumber=jsonObj.optInt("PostNumber");Stringprovince=jsonObj.optString("Province");Stringcity=jsonObj.optString("City");Stringaddress=jsonObj.optString("Address");}}catch(JSONExceptione){e.printStackTrace();}}2.编写一个程序,将6幅图片排列成3行2列,并对图片做圆形化处理。项目9一、选择题1.在典型的组件化架构中,(A)负责管理各个业务组件和打包APK,没有具体的业务功能。A、App壳B、业务组件层C、通用组件库D、以上都不对2.在典型的组件化架构中,(B)的每个组件都能独立编译运行,组件之间不能直接调用。A、App壳B、业务组件层C、通用组件库D、以上都不对3.在典型的组件化架构中,(C)包含了各种开源库以及与业务无关的各种自主研发的工具,供业务组件调用。A、App壳B、业务组件层C、通用组件库D、以上都不对4.以下哪一项不符合组件化的特点。(D)A、符合单一责任原则B、加快编译速度C、提高代码的复用性D、降低协作效率5.(A)让数据可在发生屏幕旋转等配置更改后继续留存。A、ViewModelB、LiveDataC、DataBindingD、以上都不对6.(B)是一种可观察的数据存储器类,具有生命周期感知能力。A、ViewModelB、LiveDataC、DataBindingD、以上都不对7.(C)以声明的方式将应用中的数据源绑定到界面组件。A、ViewModelB、LiveDataC、DataBindingD、以上都不对二、填空题1.系统提供了TypeArray类,获取到该类的实例后就可通过get***()的方法获得布局文件中设置的属性值。2.通过复写onMeasure()方法能测量View的大小,通过复写onDraw()方法能绘制自定义控件的效果。3.在attrs.xml文件中,使用attr节点来声明属性名及其接受的数据格式。4.在典型的组件化架构中,APP壳负责管理各个业务组件和打包APK,没有具体的业务功能。5.配置为Application插件意味着该模块能独立运行调试,项目构建后会输出一个APK安装包。6.配置为Library插件意味着该模块以插件的形式进行集成调试,构建后输出ARR包。7.Jetpack主要包括4个部分,分别是基础(Foundation)、架构(Architecture)、行为(Behavior)和界面(UI)。8.ViewModel把View中的数据独立处理,单独对其进行存储和管理,使得Activity/Fragment的功能得到简化,不需要再管理界面中的数据。9.用于更新界面的LiveData对象应该存储在ViewModel对象中,而不是将其存储在Activity或Fragment中。三、判断题1.在软件工程中,耦合指的是程序间的依赖关系,包括类之间的依赖和方法之间的依赖。(对)2.在程序设计中,要尽可能降低耦合度。(对)3.在代码实现上,可以通过callback接口回调实现解耦。(对)4.AndroidJetpack可以消除大量重复样板式的代码。(对)5.Jetpack组件库可在各种Android版本和设备中以一致的方式运作。(对)6.Jetpack组件不能搭配工作,只能单独使用。(错)7.为观察LiveData对象而注册的非活跃观察者也会收到更改通知。(错)四、简单题1.请简述自定义UI控件的步骤。答:自定义UI组件一般分为3个步骤。一是自定义标签属性,二是自定义组件类,三是在XML布局文件中使用自定义的UI控件。(1)自定义标签属性在values目录下创建attrs.xml文件,通过declare-styleable节点的name属性,定义样式属性集的名称,通过attr节点的name属性和format属性,指定自定义属性的属性名和属性值的类型。(2)自定义组件类。一般分为两种情况。一是自定义的类继承自View及其子类,这种情况下,通常通过复写onMeasure()方法测量View的大小,并通过复写onDraw()方法绘制自定义控件的效果。二是自定义的类继承自ViewGroup或者各种Layout,这种情况下,通常是把系统原生控件组合在一起形成复合的自定义控件。不管哪种情况,都需要创建构造方法;如果有自定义属性,则需要获取attrs.xml中定义的属性;如果有需求,还可以在此绑定业务逻辑,实现与用户的交互。(3)在XML布局文件中使用自定义的UI控件。使用包名.类名的完整路径使用自定义的UI控件。2.请简述你对软件工程中耦合和解耦的理解。答:在软件工程中,耦合指的是程序间的依赖关系,包括类之间的依赖和方法之间的依赖。依赖程度越高说明耦合度越高,维护成本也越高。降低耦合度即可理解为解耦。在程序设计中,要尽可能降低耦合度,如果发现代码耦合,就要采取解耦技术。在整体设计上,将整个业务应用划分为表现层(UI)、业务逻辑层(BLL)及数据访问层(DAL),降低层与层之间的依赖。在代码实现上,可以通过callback接口回调实现解耦。3.请说出组件化给我们带来的5个好处。答:组件化给我们带来的好处有:(1)符合单一责任原则:各个组件专注自身功能的实现,模块中代码高度聚合,只负责一项业务。(2)能加快编译速度:每个业务功能都能独立编译运行。(3)能提高协作效率。由于各业务研发可以互不干扰,团队成员只需专注自身负责的业务,降低团队成员熟悉项目的成本。(4)能提高代码的复用性。由于通用功能都封装在通用组件库中,业务组件添加了对通用组件库的依赖便可以直接调用。(5)能降低维护成本。由于业务功能的独立性,对一个业务的修改和增删不会影响其他业务。五、编程题1.设计一个应用程序,包含“图书”和“新闻”两个业务组件,以及一个通用组件库。两个业务模块各司其职,相互独立,通用组件库包含了所有模块需要的依赖库,以及一些工具类。图书模块用来展示图书列表,新闻模块用来展示新闻列表。能在图书模块和新闻模块之间跳转。项目10一、填空题1.Zygote进程加载和初始化一些核心类库,并创建一个服务端socket,等待AMS发起socket请求。2.在Android应用程序框架层中,由AMS(ActivityManagerService)组件负责为Android应用程序创建新的进程。3.广播的注册分为静态注册和动态注册两种方式。4.Service启动方式有两种,一种是通过Context的startService启动Service,另一种是通过Context的bindService绑定Service。5.在Android中,Binder机制采用C/S架构模式,基于内存映射,在内核空间将Client端和Service端两个用户空间的进程联系在一起。6.操作系统从逻辑上将虚拟空间划分为用户空间和内核空间。7.Android中可以将线程分为主线程MainThread和工作线程WorkerThread两大类。二、判断题1.所有的系统服务都是需要在ServiceManager中进行注册。(对)2.要想启动一个应用程序,首先要保证这个应用程序所需要的应用程序进程已经启动。(对)3.在Android系统中,广播是一种运用在组件之间传递消息的机制,广播接收者是Android四大组件之一。(对)4.在操作系统中,进程之间的内存和数据都是不共享的。(对)5.Android线程间消息处理机制是一种同步回调机制。(错)三、简答题1.请简述应用程序进程创建过程。答:应用程序进程创建过程的步骤分为两个部分。(1)AMS请求Zygote创建应用程序进程每当AMS需要创建一个新的应用程序进程来启动一个应用程序组件时,它就会调用AMS类的成员函数startProcessLocked向Zygote进程发送一个创建应用程序进程的请求。(2)Zygote接收请求并创建应用程序进程。Zygote进程收到创建新的应用进程的请求后,会调用processOneCommand()方法,使用fork在当前进程中创建子进程。子进程中使用handleChildProc()方法调用ZygoteInit对子进程环境做初始

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论