课程进度 59% · 第7/11章第7/11章 · 标签 1/2
— 1 —
多线程与异步
Android 主线程(UI 线程)负责界面更新,耗时操作必须在子线程执行,否则会导致 ANR(应用无响应)。
java
1
// 子线程执行任务
2
new Thread(() -> {
3
// 耗时操作
4
final String result = doHeavyWork();
5
// 切换到主线程更新 UI
6
runOnUiThread(() -> textView.setText(result));
7
}).start();
8
9
// Handler 用法
10
Handler handler = new Handler(Looper.getMainLooper());
11
handler.post(() -> {
12
// 主线程更新 UI
13
textView.setText("更新完成");
14
});
15
16
// 延迟执行
17
handler.postDelayed(() -> {
18
// 延迟 1 秒执行
19
}, 1000);
📖Android 不允许在子线程直接更新 UI,必须通过 runOnUiThread 或 Handler 切换到主线程
— 2 —
性能优化技巧
- 避免内存泄漏 —— 使用弱引用(WeakReference)、及时释放资源、注意静态变量引用
- 布局优化 —— 减少布局嵌套深度,使用 ConstraintLayout 替代多层 LinearLayout
- 图片压缩与缓存 —— 使用 Glide 等图片库自动处理,避免大图直接加载到内存
- ViewStub 延迟加载 —— 不常用的布局使用 ViewStub 按需加载
- SparseArray —— 替代 HashMap<Integer, Object>,内存更高效
- 避免在 onDraw 中创建对象 —— 在构造函数中预先创建 Paint、Path 等对象
- 使用 RecyclerView 的 setHasFixedSize(true) 提高列表性能
◆
常用性能分析工具
- Android Profiler —— CPU、内存、网络实时监控
- Memory Profiler —— 检测内存泄漏与内存抖动
- CPU Profiler —— 分析方法耗时与线程状态
- LeakCanary —— 自动检测内存泄漏
- StrictMode —— 检测主线程上的 IO 与网络操作