2022年苏州大学Android期末复习汇编 .pdf
《2022年苏州大学Android期末复习汇编 .pdf》由会员分享,可在线阅读,更多相关《2022年苏州大学Android期末复习汇编 .pdf(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Android 应用开发复习题:1 Android 的体系结构是怎样的?请简要加以说明。Android 的系统架构采用了分层架构的思想。从上层到底层共包括四层:应用层、应用框架层、系统运行库层、Linux 内核层。2 Android 程序结构是怎样的?请简要加以分析。src 目录:java 源代码gen目录:BuildConfig.java、R.java res 目录:res 目录是资源目录,可以存放应用使用到的各种资源,如 XML 界面文件、图片、数据等。assets 目录:assets 资源目录一般可用于存放 html 文件、数据库文件、javascript 文件等,还有原始格式的文件.A
2、ndroidManifest.xml:列出了应用程序提供的功能,开发好的各种组件需要在此文件中进行配置,当应用使用到系统内置的应用还需在此文件中声明使用权限3 Handler 消息传递机制是怎样的?试以“计时器”的编程举例加以说明。首先需要在主线程当中创建一个 Handler 对象,并重写 handleMessage()方法。然后当子线程中需要进行 UI 操作时,就创建一个 Message 对象,并通过 Handler 将这条消息发送出去。之后这条消息会被添加到 MessageQueue 的队列中等待被处理,而 Looper 则会一直尝试从MessageQueue 中取出待处理消息,最后分发回
3、 Handler的 handleMessage()方法中。由于Handler 是在主线程中创建的,所以此时 handleMessage()方法中的代码也会在主线程中运行,于是我们在这里就可以安心地进行 UI 操作了。一条 Message 经过这样一个流程的辗转调用后,也就从子线程进入到了主线程,从不能更新 UI 变成了可以更新 UI,整个异步消息处理的核心思想也就是如此。4 什么是进程内服务?请编程加以说明。在同一个进程下调用的服务,(通常情况下)即在一个应用程序下的服务。Service 的启动有两种方式:context.startService()和 context.bindService(
4、)。新建一个MyService继承自Service,并重写父类的onCreate()、onStartCommand()和onDestroy()方法。Service与 activity通讯:context.bindService()我们首先创建了一个ServiceConnection的匿名类,在里面重写了onServiceConnected()方法和 onServiceDisconnected()方法,这两个方法分别会在Activity与 Service建立关联和解除关联的时候调用。bindService()方法接收三个参数,第一个参数就是刚刚构建出的Intent对象,第二个参数是 前 面 创
5、建 出 的ServiceConnection的 实 例,第 三 个 参 数 是 一 个 标 志 位,这 里 传 入BIND_AUTO_CREATE 表示在Activity和 Service建立关联后自动创建Service,这会使得MyService 中的 onCreate()方法得到执行,但onStartCommand()方法不会执行。名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 18 页 -然后如何我们想解除Activity和 Service之间的关联怎么办呢?调用一下unbindService()方法就可以了,这也是Unbind Service按钮的点击事件里实现的逻辑。5
6、 什么是跨进程服务?请编程加以说明。通过一个应用程序(客户端)的Activity调用另一个应用程序(服务端)的Service为跨进程服务。由于每个应用程序都运行在自己的进程空间,并且可以从应用程序 UI 运行另一个服务进程,而且经常会在不同的进程间传递对象。在 Android 平台,一个进程通常不能访问另一个进程的内存空间,所以要想对话,需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界。Android 提供了 AIDL 工具来处理这项工作。在 Android 中,如果需要在不同进程间实现通信,就需要用到 AIDL 技术去完成。AIDL 是一种接口定义语言,编译器通过*.aid
7、l 文件的描述信息生成符合通信协议的 Java代码,无需自己去写这段繁杂的代码,只需要在需要的时候调用即可,通过这种方式我们就可以完成进程间的通信工作。在 Android 中,每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢?显然,Java 中是不支持跨进程内存共享的。因此要传递对象,需要把对象解析成操作系统能够理解的数据格式,以达到跨界对象访问的目的。我 们 只 是 修 改 了ServiceConnection中 的 代 码。可 以 看 到,这 里 首 先 使 用 了MyAIDLService.Stub.asInterface()方法将传入的IBinder对象传换成
8、了MyAIDLService对象,接下来就可以调用在MyAIDLService.aidl文件中定义的所有接口了。ClientTest中的Activity如果想要和MyService建立关联其实也不难,首先需要将MyAIDLService.aidl文件从 ServiceTest项目中拷贝过来,注意要将原有的包路径一起拷贝过来,完成后项目的结构如下图所示:这里先是对MyAIDLService.Stub进行了实现,重写里了toUpperCase()和 plus()这两个方法。这两个方法的作用分别是将一个字符串全部转换成大写格式,以及将两个传入的整数进行相加。然后在onBind()方法中将MyAIDL
9、Service.Stub的实现返回。这里为什么可以这样写呢?因为 Stub 其实就是Binder的子类,所以在onBind()方法中可以直接返回Stub 的实现。我们实现了 IPerson.Stub 这个抽象类的 hello 方法,然后再 onBind(Intent)方法中返回我们的 stub 实例,这样一来调用方获取的 IPerson.Stub 就是我们的这个实例,hello 方法也会按照我们的期望那样执行。我们要重写 ServiceConnection 中的 onServiceConnected 方法将 IBinder 类型的对象转换成我们 的IPerson 类型。我们再通过 服务端Ser
10、vice 定义的“android.intent.action.AIDLService”这个标识符来绑定我们所需要的服务,这样客户端和服务端就实现了通信的连接,我们就可以调用 IPerson 中的 hello 方法了。使 用 了MyAIDLService.Stub.asInterface()方 法 将 传 入 的IBinder对 象 传 换 成 了MyAIDLService对象,接下来就可以调用在MyAIDLService.aidl文件中定义的所有接口了。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 18 页 -IPerson 接口中的抽象内部类Stub 继承 android.o
11、s.Binder 类并实现IPerson 接口,其中比 较重要的方法是asInterface(IBinder)方法,该方法会将IBinder 类型的对象转换成IPerson 类型,必要的时候生成一个代理对象返回结果。6 如何发送广播?请编程加以说明。因此新建一个MyBroadcastReceiver 继承自BroadcastReceiver,代码如下所示:public class MyBroadcastReceiver extends BroadcastReceiver Override public void onReceive(Context context,Intent intent)T
12、oast.makeText(context,received in MyBroadcastReceiver,Toast.LENGTH_SHORT).show();然后在AndroidManifest.xml 中对这个广播接收器进行注册然后修改 MainActivity中的代码,如下所示:public class MainActivity extends Activity ,Override protected void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.l
13、ayout.activity_main);Button button=(Button)findViewById(R.id.button);button.setOnClickListener(new OnClickListener()Override public void onClick(View v)Intent intent=new Intent(com.example.broadcasttest.MY_BROADCAST);sendBroadcast(intent););,可以看到,我们在按钮的点击事件里面加入了发送自定义广播的逻辑。首先构建出了一个 Intent 对象,并把要发送的广播
14、的值传入,然后调用了 Context 的 sendBroadcast()方法将广播发送出去,这样所有监听 com.example.broadcasttest.MY_BROADCAST 这条广播的广播接收器就会收到消息。此时发出去的广播就是一条标准广播。名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 18 页 -7 如何接收系统广播消息?请编程加以说明。其实只需要新建一个类,让它继承自 BroadcastReceiver,并重写父类的 onReceive()方法就行了。这样当有广播到来时,onReceive()方法就会得到执行,具体的逻辑就可以在这个方法中处理。registerRe
15、ceiver(BroadcastReceiver,intentFilter);-oncreate()unregisterReceiver(BroadcastReceiver);-ondestroy()8 什么是观察者模式?观察者模式的使用场景是怎样的?观察者模式的优缺点是什么?试编程加以说明。定义:定义对象间一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新使用场景:关联行为场景。注意的是,关联行为是可拆分的,而不是组合关系。事件多级触发场景跨系统的消息交换场景,如消息队列的处理机制优点:观察者和被观察这之间是抽象耦合的建立一套触发机制缺点:需要考虑下开发
16、效率和运行效率9 什么是装饰模式?装饰模式的使用场景是怎样的?装饰模式的优缺点是什么?试编程加以说明。装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。装饰器模式的应用场景:(1)需要扩展一个类的功能。(2)动态的为一个对象增加功名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 18 页 -能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)缺点:产生过多相似的对象,不易排错。优点:装饰类和被装饰类可以独立发展,而不会互相耦合装饰模式是继承关系的一个替代方案装饰模式可以动态地扩展为
17、一个实现类的功能10.Executor、ExecutorService和Executors的区别是什么?Executor 是一个简单的标准化接口,用于定义类似于线程的自定义子系统,包括线程池、异步 IO 和轻量级任务框架。根据所使用的具体Executor 类的不同,可能在新创建的线程中,现有的任务执行线程中,或者调用execute()的线程中执行任务,并且可能顺序或并发执行。ExecutorService提供了多个完整的异步任务执行框架。ExecutorService 管理任务的排队和安排,并允许受控制的关闭。Executors 类提供大多数Executor 的常见类型和配置的工厂方法,以及使
18、用它们的几种实用工具方法Java 里面线程池的顶级接口是Executor,但是严格意义上讲Executor 并不是一个线程池,而只是一个执行线程的工具。真正的线程池接口是ExecutorService。ExecutorService 继承Executor。Executors 类为创建ExecutorService 提供了便捷的工厂方法。11.为什么说 Executors类为创建 ExecutorService提供了便捷的工厂方法?要配置一个线程池是比较复杂的,尤其是对于线程池的原理不是很清楚的情况下,很有可能配置的线程池不是较优的,因此在Executors 类里面提供了一些静态工厂,生成一些常
19、用的线程池。(1)newCachedThreadPool:创建一个可缓存的线程池。如果线程池的大小超过了处理任名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 18 页 -务所需要的线程,那么就会回收部分空闲(60 秒不执行任务)的线程,当任务数增加时,此线程池又可以智能地添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。(2)newFixedThreadPool:创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常
20、而结束,那么线程池会补充一个新线程。(3)newSingleThreadExecutor:创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。(4)newScheduledThreadPool:创建一个定长线程池,此线程池支持定时以及周期性执行任务的需求。12.MyBatis 与JDDC相比的优势是什么?(1)数据库连接不再过于频繁。(2)SQL 语句比较集中(3)SQL 语句参数比较灵活(4)支持结果映射和结果缓存。(5)SQL 重用度提高
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年苏州大学Android期末复习汇编 2022 苏州大学 Android 期末 复习 汇编
限制150内