# Android 例题套卷(一)//claude code生成


一、选择题(每题 5 分,共 10 题)

  1. 下列哪个不属于 Android 四大组件?

    A. Activity

    B. Service

    C. Handler

    D. BroadcastReceiver

    答案:C

    解析:四大组件是 Activity、Service、BroadcastReceiver、ContentProvider。Handler 是消息处理机制,不属于组件。

  2. 在 AndroidManifest.xml 中,声明应用入口 Activity 需要添加的 intent-filter 是?

    A. ACTION_MAIN + CATEGORY_DEFAULT

    B. ACTION_MAIN + CATEGORY_LAUNCHER

    C. ACTION_LAUNCHER + CATEGORY_HOME

    D. ACTION_VIEW + CATEGORY_LAUNCHER

    答案:B

    解析:ACTION_MAIN 声明为应用主入口,CATEGORY_LAUNCHER 使其出现在桌面启动器中,二者组合才能产生桌面图标。

  3. 关于 dppx,以下说法正确的是?

    A. 1dp 在所有设备上永远等于 1px

    B. dp 是像素单位,px 是密度无关单位

    C. dp 是密度无关像素,在不同密度屏幕上显示大小一致

    D. 文字大小应该用 dp 设置

    答案:C

    解析:dp 根据屏幕密度自动缩放,保证在不同 DPI 屏幕上物理大小一致。文字应用 sp,px 是绝对像素。

  4. 当 Activity A 启动 Activity B 时,A 和 B 的生命周期调用顺序是?

    A. A.onPause → B.onCreate → B.onStart → B.onResume → A.onStop

    B. A.onStop → B.onCreate → B.onStart → B.onResume → A.onPause

    C. B.onCreate → A.onPause → B.onStart → A.onStop → B.onResume

    D. A.onPause → A.onStop → B.onCreate → B.onStart → B.onResume

    答案:A

    解析:A 先失去焦点(onPause),然后 B 创建并显示,最后 A 完全不可见(onStop)。

  5. Toast 的 LENGTH_SHORT 大约显示多长时间?

    A. 1 秒

    B. 2 秒

    C. 3.5 秒

    D. 5 秒

    答案:B

    解析:LENGTH_SHORT 约 2 秒,LENGTH_LONG 约 3.5 秒,这是系统常量,不能自定义毫秒数。

  6. 以下哪种方式不能 实现 Button 的点击事件?

    A. XML 中配置 android:onClick="methodName"

    B. 调用 setOnClickListener()

    C. 调用 setOnItemClickListener()

    D. Activity 实现 View.OnClickListener 接口

    答案:C

    解析:setOnItemClickListener 是 ListView/AdapterView 的列表项点击监听,普通 Button 没有此方法。

  7. LinearLayout 设置 android:orientation="horizontal" 时,子控件如何排列?

    A. 从上到下垂直排列

    B. 从左到右水平排列

    C. 层叠堆放在左上角

    D. 按权重随机排列

    答案:B

    解析:horizontal=水平方向从左到右,vertical=垂直方向从上到下。

  8. RelativeLayout 中,将一个控件放在另一个控件下方的属性是?

    A. android:layout_above

    B. android:layout_below

    C. android:layout_toLeftOf

    D. android:layout_alignTop

    答案:B

    解析:below=在下方,above=在上方,toLeftOf=在左侧,toRightOf=在右侧。

  9. Handler 中 handleMessage() 方法运行在哪个线程?

    A. 调用 sendMessage() 的线程

    B. Handler 创建时关联的 Looper 所在线程

    C. 始终在子线程

    D. 在新创建的独立线程

    答案:B

    解析:Handler 构造时绑定一个 Looper,handleMessage 就在该 Looper 所在线程执行。通常用主线程 Looper 使 handleMessage 在主线程更新 UI。

  10. 关于 GET 和 POST 请求,以下说法错误 的是?

    A. GET 参数拼接在 URL 中,POST 参数放在请求体中

    B. POST 比 GET 更安全,参数不会暴露在 URL 中

    C. GET 请求的数据量没有限制

    D. 在 Android 中,网络请求必须放在子线程

    答案:C

    解析:GET 参数拼在 URL 中,受 URL 长度限制(通常约 2KB),并非无限制。


二、填空题(每题 4 分,共 10 题)

  1. Android 应用的包名和四大组件必须在 ____________ 文件中声明。

    答案:AndroidManifest.xml

    解析:manifest 是应用的入口配置文件,四大组件不在此声明会抛类找不到异常。

  2. 使用 TableLayout 时,每一行通过 ____________ 标签表示。

    答案:<TableRow>

    解析:TableLayout 类似 HTML 的 table,TableRow 相当于 tr,每行内的 View 相当于 td。

  3. 设置控件 id 的语法是 android:id="________"(请写出完整格式)。

    答案:@+id/xxx

    解析:@+id/ 表示新建一个 id 资源,+ 号表示添加到 R.java 中。引用已有 id 用 @id/(不加 +)。

  4. 创建 AlertDialog 必须使用 ____________ 模式进行构造。

    答案:Builder(建造者模式)

    解析:AlertDialog 构造器是 protected 的,不能直接 new,必须通过 Builder 一步步设置属性后 show()。

  5. Handler 发送消息到消息队列的方法是 ____________。

    答案:sendMessage()

    解析:handler.sendMessage(msg) 将 Message 加入 MessageQueue。

  6. Android 中用于调试的命令行工具缩写是 ____________。

    答案:adb

    解析:adb(Android Debug Bridge)用于连接设备、安装 APK、查看日志(adb logcat)、进入 shell 等。

  7. Activity 加载布局文件的方法是 ____________。

    答案:setContentView()

    解析:调用 setContentView(R.layout.xxx) 将 XML 布局解析为 View 树并绑定到 Activity。必须在 onCreate 中且在 findViewById 之前调用。

  8. EditText 中设置占位提示文字的属性是 ____________。

    答案:android:hint

    解析:hint 显示为灰色文字,用户输入后自动消失,常用于"请输入用户名"等提示。

  9. 通过 Intent 传递数据的方法是 ____________ 和 ____________(发送和接收)。

    答案:putExtra();getStringExtra() 或 getXxxExtra()

    解析:发送用 putExtra(key, value),接收根据数据类型用 getStringExtra、getIntExtra 等方法。

  10. 主线程又被称作 ____________ 线程,因为它负责更新界面。

    答案:UI

    解析:UI 线程即主线程,只有它能操作界面控件。子线程不能直接更新 UI,必须通过 Handler 等机制。


三、简答题(每题 7 分,共 4 题)

  1. 简述 implementationapi 在 Gradle 依赖配置中的区别。

    答案:implementation 依赖不对外传递,调用者无法使用被依赖库的 API;api 依赖会传递,调用者可以直接使用被依赖库的类。一般用 implementation 可减少编译时间。

    解析:A implementation B,B api C → A 能直接用 C 的类;B implementation C → A 不能调用 C。

  2. 写出 Activity 生命周期的七个回调方法名称,并简要说明每个回调的用途。

    答案:onCreate(初始化布局、findViewById)→ onStart(即将可见)→ onResume(前台交互,获焦点)→ onPause(失去焦点,保存数据,必须快速完成)→ onStop(完全不可见,释放重量级资源)→ onDestroy(最终销毁,清理所有绑定)。onRestart(从 stop→start)不是必经回调。

    解析:口诀"创§始现焦失停毁重启"。必须记住顺序和典型用途,考试常考 A 启动 B 的调用顺序。

  3. 简述 Handler 机制中 Looper、MessageQueue、Message、Handler 四者的关系。

    答案:Looper 是消息循环器,不断从 MessageQueue(消息队列,按时间排序的单链表)中取出 Message(消息载体,含 what/obj);Handler 负责 sendMessage 将消息放入队列,并在目标线程的 handleMessage 中处理消息。主线程自带 Looper,子线程默认没有。

    解析:Handler.sendMessage(msg) → MessageQueue 存储 → Looper.loop() 取出 → Handler.handleMessage 处理。Message 推荐用 obtain() 复用。

  4. 简述使用 HttpURLConnection 发送 POST 请求的完整步骤。

    答案:(1) new URL() → (2) openConnection() → (3) setRequestMethod("POST") → (4) setDoOutput(true) → (5) setRequestProperty 设置 Content-Type → (6) getOutputStream() 写请求体 → (7) getInputStream() 读响应 → (8) disconnect()。整个过程在子线程,需声明 INTERNET 权限。

    解析:POST 与 GET 关键区别是 setDoOutput(true) 和写请求体。


四、编程题(填空方式)(每题 10 分,共 2 题)

  1. 以下代码实现从 MainActivity 跳转到 SecondActivity,并传递用户名和密码。
java 复制代码
// MainActivity.java
public void goToSecond(View view) {
    Intent intent = new Intent(MainActivity.this, __________(1)__________);
    intent.putExtra(__________(2)__________, "zhangsan");
    intent.putExtra("password", "123456");
    __________(3)__________;
}

// SecondActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    Intent intent = __________(4)__________;
    String username = intent.__________(5)__________("username");
}

答案:(1) SecondActivity.class (2) "username" (3) startActivity(intent) (4) getIntent() (5) getStringExtra

解析:(1) Intent 构造器第二个参数是目标 Class 对象;(2) putExtra 第一个参数是 key;(3) 启动 Activity 必须调 startActivity;(4) getIntent() 获取启动当前 Activity 的 Intent;(5) 用 key 取出字符串。


  1. 以下代码实现在子线程下载数据,完成后通过 Handler 更新 UI。
java 复制代码
private Handler handler = new Handler(__________(1)__________) {
    @Override
    public void handleMessage(Message msg) {
        if (msg.__________(2)__________ == 1) {
            String result = (String) msg.__________(3)__________;
            textView.setText(result);
        }
    }
};

private void loadData() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            String data = downloadFromServer();
            Message msg = Message.__________(4)__________;
            msg.what = 1;
            msg.obj = data;
            handler.__________(5)__________;
        }
    }).start();
}

答案:(1) Looper.getMainLooper() (2) what (3) obj (4) obtain() (5) sendMessage(msg)

解析:(1) 主线程 Looper,使 handleMessage 在主线程更新 UI;(2) what 消息标识;(3) obj 携带 Object 数据;(4) obtain() 复用 Message;(5) sendMessage 发送到队列。