Để mang đến trải nghiệm mượt mà, ổn định và tiết kiệm pin cho ứng dụng, bạn cần xác định và giải quyết các điểm nghẽn hiệu suất thường gặp về độ ổn định, kết xuất giao diện người dùng, mức tiêu thụ bộ nhớ, hoạt động ở chế độ nền, độ trễ khi khởi động và tối ưu hoá bản dựng.
Các hướng dẫn trong phần này giải thích hành vi cơ bản của nền tảng Android đối với từng loại vấn đề, đồng thời hướng dẫn cách chẩn đoán, phân tích tài nguyên và khắc phục các vấn đề đó bằng các công cụ như Trình phân tích tài nguyên Android Studio, Perfetto, Logcat và ApplicationExitInfo.
Độ ổn định
- Lỗi ANR: Chẩn đoán và khắc phục lỗi Application Not Responding (ANR) do luồng giao diện người dùng bị chặn, I/O luồng chính, tranh chấp khoá hoặc broadcast receiver chậm.
- Sự cố: Đọc dấu vết ngăn xếp, kiểm tra đầu ra Logcat, đồng thời ngăn chặn các ngoại lệ chưa được xử lý và tín hiệu gốc.
Kết xuất và khởi động
- Kết xuất chậm: Xác định và khắc phục các khung hình giao diện người dùng bị bỏ qua hoặc bị treo (
>16msvà>700ms) do bố cục tốn nhiều tài nguyên, các lượt truyền liên kết hoặc tình trạng tắc nghẽn luồng chính. - Phiên chậm (chỉ dành cho trò chơi):
Đo tốc độ khung hình bằng
SurfaceFlingervà tối ưu hoá tốc độ khung hình của trò chơi bằng Android Frame Pacing (Swappy), Vulkan và Android Dynamic Performance Framework (ADPF). - Thời gian khởi động ứng dụng: Tìm hiểu nội dung bên trong của quy trình khởi động nguội, khởi động ấm và khởi động nóng, đo lường Thời gian hiển thị khung hình đầu tiên (TTID) và Thời gian hiển thị khung hình đầu tiên với nội dung đầy đủ (TTFD), đồng thời tối ưu hoá quy trình khởi động.
Quản lý bộ nhớ
- Trình đóng các tiến trình ít cần thiết khi còn ít dung lượng (LMK): Tìm hiểu cách trình nền đóng các tiến trình ít cần thiết khi còn ít dung lượng (
lmkd) của Android ưu tiên các quy trình thông quaoom_adj_scorevà lập hồ sơ mức sử dụng bộ nhớ trong Android Studio, Unity và Unreal Engine. - Mức sử dụng bộ nhớ (RSS ẩn danh + bộ nhớ hoán đổi): Đo lường và giảm Dung lượng bộ nhớ RAM bị chiếm dụng (RSS) ẩn danh và mức sử dụng bộ nhớ hoán đổi của ứng dụng ở các trạng thái nền trước, dịch vụ và nền sau.
- Mức sử dụng bộ nhớ bitmap: Chẩn đoán các hoạt động phân bổ bitmap bị rò rỉ hoặc có kích thước quá lớn và giải phóng các vùng đệm đồ hoạ khi các thành phần giao diện người dùng chuyển sang nền.
Pin và hoạt động chạy trong nền
- Khoá chế độ thức quá mức: Tránh giữ khoá chế độ thức một phần trong thời gian dài và di chuyển các tác vụ ở chế độ nền sang
WorkManagerhoặcJobScheduler. - Lỗi với khoá chế độ thức một phần: Đảm bảo rằng mọi khoá chế độ thức một phần đã thu thập đều được giải phóng đúng cách trên tất cả các đường dẫn thực thi và lỗi.
- Đánh thức quá nhiều lần: Giảm số lần đánh thức chuông báo chính xác và xử lý hàng loạt hoặc hoãn công việc ở chế độ nền đã lên lịch.
- Quét tìm Wi-Fi ở chế độ nền quá mức: Giảm thiểu tần suất quét tìm Wi-Fi ở chế độ nền và sử dụng các API vị trí và kết nối thụ động hoặc theo lô.
- Sử dụng mạng quá mức ở chế độ nền:
Chuyển dữ liệu mạng di động ở chế độ nền theo lô và trì hoãn bằng cách sử dụng các ràng buộc
WorkManager. - Mức sử dụng pin quá cao: Chẩn đoán tình trạng tiêu hao pin nhanh trên thiết bị di động và thiết bị Wear OS bằng cách lập hồ sơ hoạt động của CPU, cảm biến và đài.
Quyền và tối ưu hoá bản dựng
- Từ chối cấp quyền: Yêu cầu quyền khi bắt đầu chạy trong bối cảnh và giải thích rõ ràng cho người dùng về lý do yêu cầu cấp quyền.
- Tối ưu hoá mã DEX: Định cấu hình các quy tắc rút gọn, làm rối mã nguồn và tối ưu hoá R8 để giảm kích thước DEX và cải thiện hiệu suất thời gian chạy.