Các phương pháp hay nhất giúp tối ưu hoá ứng dụng

Các phương pháp hay nhất sau đây giúp tối ưu hoá ứng dụng của bạn mà không làm giảm chất lượng.

Sử dụng Hồ sơ cơ sở

Hồ sơ cơ sở có thể cải thiện 30% tốc độ thực thi mã kể từ lần khởi chạy đầu tiên và tất cả các lượt tương tác của người dùng (chẳng hạn như khởi động ứng dụng, di chuyển giữa các màn hình hoặc cuộn qua nội dung) có thể mượt mà hơn từ lần chạy đầu tiên. Việc tăng tốc độ và khả năng phản hồi của ứng dụng sẽ tăng lượng người dùng hoạt động hằng ngày và cải thiện tỷ lệ truy cập trung bình của người dùng cũ.

Sử dụng hồ sơ khởi động

Hồ sơ khởi động tương tự như Hồ sơ cơ sở, nhưng chạy trong thời gian biên dịch để tối ưu hoá bố cục DEX nhằm khởi động ứng dụng nhanh hơn.

Sử dụng thư viện Khởi động ứng dụng

Thư viện Khởi động ứng dụng cho phép bạn xác định các trình khởi chạy thành phần dùng chung một nhà cung cấp nội dung, thay vì xác định các nhà cung cấp nội dung riêng biệt cho từng thành phần bạn cần khởi chạy. Giải pháp này có thể giúp cải thiện đáng kể thời gian khởi động ứng dụng.

Tải từng phần thư viện hoặc tắt tính năng tự động khởi chạy

Ứng dụng sử dụng nhiều thư viện, một số thư viện có thể bắt buộc phải khởi động. Tuy nhiên, có thể có nhiều thư viện có thể bị trì hoãn việc khởi chạy cho đến khi khung đầu tiên được vẽ. Một số thư viện có tuỳ chọn tắt tính năng tự động khởi chạy khi khởi động hoặc có tính năng khởi chạy theo yêu cầu. Hãy sử dụng tuỳ chọn này để trì hoãn việc khởi chạy cho đến khi cần thiết để giúp tăng hiệu suất. Ví dụ: bạn có thể sử dụng tính năng khởi chạy theo yêu cầu để chỉ gọi WorkManager khi thành phần này là bắt buộc.

Sử dụng ViewStub

ViewStub là một View vô hình, có kích thước bằng 0 mà bạn có thể sử dụng để tăng cường từng phần tài nguyên bố cục trong thời gian chạy. Nhờ vậy, bạn có thể trì hoãn việc tăng cường các khung hiển thị không cần thiết khi khởi động cho đến sau này.

Nếu đang dùng Jetpack Compose, bạn có thể nhận được hành vi tương tự đối với ViewStub khi sử dụng trạng thái để trì hoãn việc tải một số thành phần:

var shouldLoad by remember {mutableStateOf(false)}

if (shouldLoad) {
   MyComposable()
}

Tải các thành phần kết hợp bên trong khối có điều kiện bằng cách sửa đổi shouldLoad:

LaunchedEffect(Unit) {
   shouldLoad = true
}

Lệnh này kích hoạt quá trình kết hợp lại bao gồm mã bên trong khối có điều kiện trong đoạn mã đầu tiên.

Tối ưu hoá màn hình chờ

Màn hình chờ là một phần quan trọng khi khởi động ứng dụng và việc sử dụng màn hình chờ được thiết kế hợp lý có thể giúp cải thiện trải nghiệm khởi động chung của ứng dụng. Android 12 (API cấp 31) trở lên có màn hình chờ được thiết kế để cải thiện hiệu suất. Để biết thêm thông tin, hãy xem bài viết Màn hình chờ.

Sử dụng các loại hình ảnh có thể mở rộng

Bạn nên sử dụng vectơ vẽ được cho hình ảnh. Nếu không thể, hãy sử dụng hình ảnh WebP. WebP là định dạng hình ảnh cung cấp tính năng nén vượt trội không tổn hao và có tổn hao đối với hình ảnh trên web. Bạn có thể chuyển đổi hình ảnh BMP, JPG, PNG hoặc GIF tĩnh hiện có sang định dạng WebP bằng Android Studio. Để biết thêm thông tin, hãy xem bài viết Tạo hình ảnh WebP.

Ngoài ra, hãy giảm thiểu số lượng và kích thước hình ảnh được tải trong quá trình khởi động.

Sử dụng API Hiệu suất

API Hiệu suất để phát nội dung nghe nhìn có trên Android 12 (API cấp 31) trở lên. Bạn có thể dùng API này để nắm được các chức năng của thiết bị và thực hiện hoạt động cho phù hợp.

Ưu tiên các dấu vết khi khởi động nguội

Khởi động nguội đề cập đến một ứng dụng bắt đầu từ đầu, có nghĩa là quy trình của hệ thống chưa tạo quy trình của ứng dụng. Ứng dụng thường khởi động nguội nếu bạn khởi chạy ứng dụng này lần đầu tiên kể từ khi thiết bị khởi động hoặc từ khi hệ thống buộc dừng ứng dụng. Quá trình khởi động nguội chậm hơn nhiều, vì ứng dụng và hệ thống phải thực hiện nhiều thao tác hơn, còn các loại khởi động khác (như khởi động ấm và khởi động nóng) thì không yêu cầu như vậy. Các lần khởi động nguội trong quá trình theo dõi hệ thống giúp bạn giám sát chặt chẽ hơn về hiệu suất của ứng dụng.