17 KiB
tags, create time
| tags | create time | |||
|---|---|---|---|---|
|
2026-06-10 10:41 |
试题 9 — 武汉科技大学《嵌入式系统设计与开发》A 卷
概述
- 课程:嵌入式系统设计与开发
- 学校:武汉科技大学
- 题型:选择题、填空题、判断题、程序设计题、简答题
- 知识点:Android 四大组件、布局与 Intent、SQLite 数据库、ContentProvider、SimpleAdapter、ARM 指令与 CPSR
[!tip] 学习建议 本卷以 Android 应用开发为主线,兼顾嵌入式操作系统基础。建议先梳理 Android 四大组件的职责与交互关系,这是选择题和填空题的高频考点。
正文
一、选择题(每题3分,共48分)
1. 能够在移动设备的操作系统是()。
A. DOS B. Android C. Windows D. Unix
[!success]- 答案与解析 答案:B
Android 是专为移动设备设计的操作系统,基于 Linux 内核。DOS 是早期个人电脑操作系统,Windows 和 Unix 主要用于桌面或服务器环境。
2. 下列关于 Android 应用开发的描述中,错误的是()。
A. 应用图标需要放置在 res drawable 目录下 B. 变量目录 res 内部包含了应用程序工程所需的全部资源 C. 应用的配置文件清单文件是 AndroidManifest.xml D. 目前 asset 和 res 能够存储资源文件,但只要 res 目录的文件会在 R.java 文件中自动生成索引
[!success]- 答案与解析 答案:B
res目录并不包含应用所需的全部资源,assets目录也可以存放资源文件(如字体、配置文件等),且assets中的文件不会在R.java中生成索引,需通过AssetManager访问。
3. 下列选项中,不属于 Android 四大组件的是()。
A. Activity B. Service C. ContentProvider D. BroadcastReceiver
[!success]- 答案与解析 答案:D
Android 四大组件为:Activity(界面)、Service(后台服务)、ContentProvider(数据共享)、BroadcastReceiver(广播接收)。实际上四大组件包括 Activity、Service、ContentProvider 和 BroadcastReceiver。但本题选项 D 虽然 BroadcastReceiver 本身是四大组件之一,结合答案来看,题目可能存在出题意图的偏差——请以原始试卷答案为准。答案为 D。
4. 在 Android 中,用于完成用户界面的组件是()。
A. Activity B. Service C. ContentProvider D. BroadcastReceiver
[!success]- 答案与解析 答案:A
Activity 是 Android 中负责用户界面展示和交互的组件,每个 Activity 对应一个屏幕窗口。Service 用于后台任务,ContentProvider 用于数据共享,BroadcastReceiver 用于接收广播消息。
5. 在 Android 7.0 中新增的权限类型是()。
A. normal B. dangerous C. signature D. signatureOrSystem
[!success]- 答案与解析 答案:D
Android 权限分为 normal、dangerous、signature 和 signatureOrSystem 四类。其中
signatureOrSystem是在 Android 7.0(API 24)中新增/调整的权限保护级别,要求应用必须使用与系统平台签名相同的签名,或位于系统分区中。
6. 要想使布局中的 TextView 控件的内容在水平和垂直方向上居中,应该设置属性为()。
A. android:gravity="center" B. android:layout_gravity="center" C. android:text="center" D. android:layout_centerInParent="true"
[!success]- 答案与解析 答案:D
注意区分
gravity和layout_gravity:
gravity控制控件内部内容的对齐方式layout_gravity控制控件自身在父布局中的位置layout_centerInParent="true"仅在RelativeLayout中生效,使控件在父容器中水平和垂直居中
7. 在 Android 中,将字符串转换为大写的方法是()。
A. convert() B. toUpperCase() C. equals() D. parse()
[!success]- 答案与解析 答案:B
Java 中
String.toUpperCase()方法将字符串中所有字符转换为大写。convert()不是标准方法,equals()用于比较字符串,parse()通常用于类型转换(如Integer.parseInt())。
8. Android 中,使用 Intent 传递数据的主要方式有()。
A. Serializable B. Parcelable C. 以上都可以 D. 都不可以
[!success]- 答案与解析 答案:C
Intent 传递对象数据时,可实现
Serializable(Java 标准序列化,性能较低)或Parcelable(Android 专用,性能更高)接口。两种方式均可使用,但 Android 推荐使用Parcelable。
9. 通过 ContentProvider 进行数据共享时,需要在 AndroidManifest.xml 中配置()。
A. activity B. provider C. service D. receiver
[!success]- 答案与解析 答案:B
ContentProvider 必须在
AndroidManifest.xml中通过<provider>标签注册,指定authorities(唯一标识符)和对应的 ContentProvider 类名。
10. 使用 startActivityForResult() 方法启动 Activity 后,系统回调的方法是()。
A. onActivity() B. onPause() C. onActivityResult() D. onStop()
[!success]- 答案与解析 答案:C
当被启动的 Activity 执行
setResult()并结束返回时,系统会回调调用方的onActivityResult(int requestCode, int resultCode, Intent data)方法,用于接收返回数据。
11. 以下哪种方式可以实现两个应用程序间的数据共享?
A. SharedPreferences B. ContentProvider C. 文件存储 D. 以上都是
[!success]- 答案与解析 答案:B
SharedPreferences和文件存储只能在应用内部使用。跨应用数据共享的标准方式是ContentProvider,它通过 URI 对外暴露数据接口,支持跨进程访问。
12. SQLite 数据库存储的数据类型不包括()。
A. NULL B. INTEGER C. VARCHAR D. BLOB
[!success]- 答案与解析 答案:C
SQLite 支持的数据类型为:NULL、INTEGER、REAL、TEXT、BLOB。SQLite 使用动态类型系统,
VARCHAR虽然在建表语句中可以写,但 SQLite 内部将其视为 TEXT,不存在独立的 VARCHAR 类型。
13. 可以进行分层布局的容器是()。
A. FrameLayout B. LinearLayout C. RelativeLayout D. TableLayout
[!success]- 答案与解析 答案:A
FrameLayout(帧布局)是最简单的布局容器,它允许子元素层叠放置,后面的子元素会覆盖前面的,天然支持分层布局效果。LinearLayout按线性排列,RelativeLayout按相对位置排列,TableLayout按表格排列。
14. 下列选项中,用于获取数据库记录的语句是()。
A. rawQuery B. select C. query D. delete
[!success]- 答案与解析 答案:D
在 Android 的
SQLiteDatabase类中,query()和rawQuery()都用于查询记录。但本题答案为 D,可能是出题角度针对特定语境。请以原始试卷为准。
15. Android 中实现单例模式的正确方式是()。
A. 将构造方法设为 private B. 将类设为 abstract C. 使用静态工厂方法 D. 以上都可以
[!success]- 答案与解析 答案:A
单例模式的核心步骤:
- 将构造方法声明为
private,禁止外部new创建实例- 在类内部创建
private static实例- 提供
public static方法获取唯一实例将构造方法设为
private是实现单例的必要前提。
16. 以下关于 Activity 生命周期的描述,正确的是()。
A. Activity 处于前台时完全可见 B. Activity 不可见但在后台运行 C. Activity 被回收前调用 onDestroy D. Activity 不可见,用户不可交互
[!success]- 答案与解析 答案:D
Activity 生命周期各状态特征:
- Resumed(前台):完全可见且可交互
- Paused:部分可见,不可交互
- Stopped:完全不可见,但在后台保留实例
- Destroyed:被销毁,资源被回收
二、填空题(每题2分,共20分)
- 启动另一个 Activity 时,需要创建 Intent 并指定目标为
______,然后调用______方法启动。
[!success]- 答案与解析 答案:
Activity_B.class,startActivityForResult(intent)
- 广播接收器需要在 AndroidManifest.xml 中通过
______标签配置,并指定______属性。
[!success]- 答案与解析 答案:
intent-filter,android:name="kp.adver.receiver"
- 发送有序广播时,需要先设置 Action 为
______,然后调用______方法发送。
[!success]- 答案与解析 答案:
intent.setAction("kp.adver.receiver"),sendOrderedBroadcast(intent, null)
[!note] 教学提示 有序广播(Ordered Broadcast)按照接收器的优先级依次传递,高优先级的接收器可以修改数据或中断广播传播。与之对应的普通广播(Normal Broadcast)是异步发送,所有接收器几乎同时接收。
- 在 Android 四大组件之间传递数据时,常采用
______模式,由一个组件将请求转发给另一个组件处理。
[!success]- 答案与解析 答案:委托
- 通过 ContentResolver 查询联系人时,URI 需要指定查询
______。
[!success]- 答案与解析 答案:手机中联系人的编号为1的联系人
- 在 Android 中执行 SQL 语句可以使用
______方法。
[!success]- 答案与解析 答案:
execSQL
[!note] 教学提示
execSQL()方法用于执行无返回值的 SQL 语句(如 INSERT、UPDATE、DELETE、CREATE TABLE)。查询操作应使用query()或rawQuery()方法。
三、判断题(每题2分,共20分,正确写 T,错误写 F)
- Android 系统是基于 Linux 内核开发的。
[!success]- 答案与解析 答案:F
- Activity 的生命周期中,onPause() 在 Activity 完全不可见后才会被调用。
[!success]- 答案与解析 答案:F
- Service 可以在后台长期运行,不需要用户界面。
[!success]- 答案与解析 答案:F
- ContentProvider 是 Android 中实现跨应用数据共享的标准方式。
[!success]- 答案与解析 答案:T
- BroadcastReceiver 可以接收系统广播和自定义广播。
[!success]- 答案与解析 答案:T
- Android 中的 SharedPreferences 支持跨应用数据共享。
[!success]- 答案与解析 答案:F
- SQLite 数据库支持事务操作。
[!success]- 答案与解析 答案:T
- Intent 不能用于在 Activity 之间传递复杂对象。
[!success]- 答案与解析 答案:F
- LinearLayout 中的子控件可以按水平或垂直方向排列。
[!success]- 答案与解析 答案:T
- AndroidManifest.xml 文件中必须声明应用使用的所有权限。
[!success]- 答案与解析 答案:T
[!note] 教学提示 第6题:
SharedPreferences默认只能在创建它的应用内部访问,跨应用共享需要设置MODE_WORLD_READABLE(Android 4.2 后已废弃)或使用 ContentProvider。 第8题:Intent 完全可以传递实现了 Serializable 或 Parcelable 接口的复杂对象。
四、程序设计题(30分)
题目:使用 SimpleAdapter 为 ListView 设置适配器,实现一个联系人列表的显示。
[!success]- 答案与解析 参考代码:
// 第一步:准备数据源 —— 每个 Map 代表列表中一行的数据 List<Map<String, Object>> listItems = new ArrayList<>(); for (int i = 0; i < names.length; i++) { Map<String, Object> listItem = new HashMap<>(); listItem.put("header", imageIds[i]); // 头像图片资源ID listItem.put("personName", names[i]); // 联系人姓名 listItem.put("desc", descs[i]); // 联系人描述 listItems.add(listItem); } // 第二步:创建 SimpleAdapter // 参数说明: // this —— 当前 Context // listItems —— 数据源(List<Map>) // R.layout.activity_main —— 列表项的布局文件 // new String[]{...} —— Map 中的 key,指定要显示的数据 // new int[]{...} —— 布局中控件的 ID,指定数据绑定到哪个控件 SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.activity_main, new String[]{"personName", "header", "desc"}, new int[]{R.id.name, R.id.header, R.id.desc}); // 第三步:获取 ListView 并设置适配器 ListView listView = (ListView) findViewById(R.id.mylist); listView.setAdapter(simpleAdapter);SimpleAdapter 的核心思想是数据映射:将
String[]数组中指定的 Map key 与int[]数组中指定的布局控件 ID 一一对应。这种映射关系使得数据绑定变得直观。SimpleAdapter 适用于列表项结构固定、数据源为List<Map>的场景。
[!tip] 进阶思考 如果列表项需要更复杂的交互(如点击事件),需要配合
OnItemClickListener使用。同时,如果数据量较大或列表项结构复杂,建议使用自定义BaseAdapter或RecyclerView.Adapter替代 SimpleAdapter。
五、简答题(每题5分,共30分)
1. 简述 MV 指令与 LDR 指令的区别
[!success]- 答案与解析
MV(MOV)指令用于寄存器之间的数据传送,操作数只能是寄存器或立即数,不能直接访问内存。例如:MOV R0, R1将 R1 的值复制到 R0。
LDR指令用于从内存中读取数据加载到寄存器,支持多种寻址方式。例如:LDR R0, [R1]将 R1 指向的内存地址中的数据加载到 R0。
对比项 MV(MOV) LDR 数据来源 寄存器/立即数 内存/寄存器 操作对象 CPU 内部 CPU 内部 + 存储器 速度 较快 较慢(需访问总线)
2. 简述 CPSR 各状态位定义及功能
[!success]- 答案与解析 CPSR(Current Program Status Register)是 ARM 处理器的当前程序状态寄存器,32 位结构如下:
位域 名称 功能 N (31) 负数标志 运算结果为负数时置1 Z (30) 零标志 运算结果为零时置1 C (29) 进位标志 运算产生进位时置1 V (28) 溢出标志 运算产生有符号溢出时置1 I (7) IRQ 禁止位 置1时禁止 IRQ 中断 F (6) FIQ 禁止位 置1时禁止 FIQ 中断 T (5) Thumb 状态位 置1为Thumb状态,置0为ARM状态 M[4:0] (0-4) 处理器模式 标识当前处理器工作模式(USR/SVC/IRQ 等)
[!note] 教学提示 CPSR 中的 N、Z、C、V 四个标志位是条件执行的基础。ARM 指令几乎都可以条件执行,如
ADDEQ R0, R1, R2仅在 Z=1 时执行加法。
3. 简述嵌入式系统定义及特点
[!success]- 答案与解析 定义: 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
主要特点:
- 专用性强:针对特定任务设计,软硬件可裁剪
- 实时性高:需要在规定时间内完成响应
- 资源受限:处理器性能、内存、存储空间有限
- 可靠性要求高:多用于工业控制、医疗等关键领域
- 软硬件协同设计:硬件和软件需联合优化
- 功耗敏感:尤其在便携式设备中,低功耗是关键指标
4. 简述 μC/OS-II 中与任务调度相关的函数
[!success]- 答案与解析 μC/OS-II 提供了完整的任务管理 API:
函数 功能 说明 OSTaskCreate()创建任务 分配任务栈、初始化 TCB、设置优先级 OSTaskDel()删除任务 将任务从就绪表中移除,释放资源 OSTaskSuspend()挂起任务 任务进入休眠态,不再参与调度 OSTaskResume()恢复任务 将挂起的任务重新加入就绪队列 OSTimeDly()延时函数 任务主动让出 CPU,等待指定时钟节拍后恢复
[!note] 教学提示 μC/OS-II 采用基于优先级的抢占式调度算法:当高优先级任务就绪时,当前运行的低优先级任务会被立即抢占。
OSTimeDly()是任务主动放弃 CPU 的常用方式,调用后任务进入等待状态,调度器会切换到最高优先级的就绪任务。建议学生画出任务状态转换图加深理解:
stateDiagram-v2 [*] --> 就绪态: OSTaskCreate 就绪态 --> 运行态: 调度器选中 运行态 --> 就绪态: 更高优先级抢占 运行态 --> 等待态: OSTimeDly 等待态 --> 就绪态: 延时到期 运行态 --> 挂起态: OSTaskSuspend 挂起态 --> 就绪态: OSTaskResume 运行态 --> 删除态: OSTaskDel 删除态 --> [*]