想象一下,你的Android应用像一家忙碌的咖啡店,如果只有一名员工,既要收银又要制作咖啡,店铺迟早要排长队。这就是主线程独自处理所有任务的后果!
在Android应用开发中,线程与消息处理机制是保证应用流畅运行的核心。如果说主线程是前台服务生,直接与顾客(用户)交互,那么子线程就是后厨团队,负责准备食材和烹煮咖啡。
一、Android线程基础:为何不能“一夫当关”
当Android应用启动时,系统会创建一条主线程(Main Thread),也被称为UI线程。它主要负责处理与UI相关的事件,如:按键、触屏、绘图等。
关键点: 在Android系统中,UI操作不是线程安全的,而且所有UI组件都必须在主线程中操作。
假如你在子线程中尝试直接更新UI,会抛出可怕的CalledFromWrongThreadException。这就像让后厨员工突然冲到前台去收银,整个系统就乱套了!
创建线程的两种方式:
- 继承Thread类:直接创建线程并重写run方法
- 实现Runnable接口:更灵活,可以将任务与执行分离
// 方式一:继承Thread类
class MyThread extends Thread {
public void run() {
// 执行后台任务
}
}
// 方式二:实现Runnable接口
class MyRunnable implements Runnable {
public void run() {
// 执行后台任务
}
}
二、消息处理四大天王:Handler、Message、MessageQueue与Looper
Android的消息机制实际上是一个生产者和消费者模型,涉及四个核心类:Handler、Message、MessageQueue和Looper。
1. Message - 消息的载体
Message是消息的载体,就像是快递包裹,里面装着需要传递的信息。
重要字段:
- what:消息的标志,类似于快递单号,用于识别消息类型
- arg1、arg2:用于存放整型数据
- obj:用于存放任意Object类型的对象
获取Message实例的正确方式:
// 不推荐 - 直接创建新实例
Message msg = new Message();
// 推荐 - 从消息池中获取,减少内存分配
Message msg = Message.obtain();
// 或者通过Handler获取
Message msg = handler.obtainMessage();

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



