导航菜单

软件工程/高级特性与性能优化
课程进度 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 与网络操作