0%

安卓中用到多线程的地方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
在安卓开发中,多线程几乎是随时都会用到的,尤其是涉及 耗时操作 或 异步处理 的场景,否则主线程(UI线程)会被阻塞,导致卡顿甚至 ANR(应用无响应)。
1️⃣ 网络请求

原因:HTTP 请求、WebSocket、Socket 通信等都是耗时操作。

实现方式:

RxJava

OkHttp异步回调

Coroutine(Kotlin)

AsyncTask(过时)

new Thread(() -> {
String result = httpRequest();
runOnUiThread(() -> textView.setText(result));
}).start();

2️⃣ 数据库操作

查询、插入、更新大量数据时,操作可能很慢。

实现方式:

Room + LiveData / RxJava / Coroutine

自己开子线程执行数据库操作

new Thread(() -> {
List<User> users = db.userDao().getAllUsers();
runOnUiThread(() -> adapter.setData(users));
}).start();

3️⃣ 文件 I/O

读写本地文件、图片、视频、大数据文件。

大文件操作会阻塞主线程,必须放子线程。

ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(() -> {
File file = new File(path);
writeToFile(file, content);
});

4️⃣ 图片加载 / 视频解码

Bitmap解码、视频帧处理、GIF播放。

常用工具:Glide、Fresco、ExoPlayer,本质都是在子线程处理。

5️⃣ 计时 / 定时任务

倒计时、定时上传数据、心跳包。

使用 Handler、ScheduledThreadPoolExecutor 或 TimerTask。

6️⃣ 复杂计算 / 算法

路径规划、图像处理、机器学习推理。

都要在子线程中执行,避免 UI 卡顿。

7️⃣ 消息 / 事件处理

子线程收到消息或数据,需要更新 UI。

用法:

Handler + Looper

runOnUiThread

View.post()

✅ 总结

多线程的本质目的是避免阻塞UI线程,凡是耗时操作、重复任务或异步事件,都会用到多线程。