Bộ nhớ là một tài nguyên quan trọng trong mọi môi trường phát triển phần mềm, thậm chí còn quan trọng hơn nữa trên hệ điều hành dành cho thiết bị di động do nơi này thường có bộ nhớ thực bị hạn chế. Điều này đặc biệt đúng đối với những thiết bị vốn có bộ nhớ thấp, thường thấy trên Android (phiên bản Go). Có một số cách tối ưu hoá bộ nhớ để giúp ứng dụng chạy mượt mà trong các môi trường này.
Các phương pháp hay nhất
Giải phóng bộ nhớ đệm
Nếu bạn chạy các quy trình trong nền giống như ở môi trường thông thường, tình trạng không đủ bộ nhớ có thể xảy ra. Trong trường hợp này, bạn có thể dùng onTrimMemory()
để cắt giảm bộ nhớ không cần thiết khỏi quy trình của ứng dụng. Để xác định đúng nhất mức độ cắt giảm hiện tại cho ứng dụng, hãy dùng ActivityManager.getMyMemoryState(RunningAppProcessInfo)
để tối ưu hoá hoặc cắt giảm mọi tài nguyên không cần thiết. Ví dụ: bạn có thể cắt giảm mức sử dụng bộ nhớ không cần thiết khỏi các biểu thức, lệnh tìm kiếm, bộ nhớ đệm của khung hiển thị hoặc các phần mở rộng để giảm số lần ứng dụng gặp sự cố hoặc lỗi ANR do bộ nhớ sắp hết.
Lên lịch tác vụ
Khi lên lịch đồng thời, nhiều hoạt động tốn bộ nhớ có thể chạy song song, dẫn đến tình trạng cạnh tranh tài nguyên vượt quá mức sử dụng bộ nhớ cao điểm của ứng dụng. Hãy tìm cách phân bổ hợp lý tài nguyên bằng cách phân chia các quá trình thành nhiều tác vụ thiên về CPU, độ trễ thấp trong nhóm luồng để chạy trên các thiết bị có những giới hạn về tài nguyên.
Rò rỉ bộ nhớ
Nhiều công cụ, chẳng hạn như Trình phân tích bộ nhớ trong Android Studio và Perfetto được cung cấp riêng để giúp tìm và giảm thiểu tình trạng rò rỉ bộ nhớ trong ứng dụng. Bạn nên dùng những công cụ này để xác định và khắc phục các vấn đề tiềm ẩn về bộ nhớ nhằm giúp các thành phần khác của ứng dụng chạy mà không tạo thêm áp lực cho hệ thống.
Các mẹo khác
- Hình ảnh và đối tượng có thể vẽ với kích thước lớn sẽ dùng nhiều dung lượng bộ nhớ hơn trong ứng dụng. Hãy xác định và tối ưu hoá cấu trúc bitmap kích thước lớn hoặc đầy đủ màu sắc để giảm mức sử dụng bộ nhớ.
- Thử chọn các tuỳ chọn khác cho tệp GIF trong ứng dụng khi xây dựng cho Android (phiên bản Go) vì tệp GIF sử dụng rất nhiều dung lượng bộ nhớ.
- Bạn có thể dùng các công cụ như WebP, pngcrush và pngquant để giảm kích thước tệp PNG mà vẫn giữ nguyên chất lượng ảnh. Tất cả những công cụ này đều giúp giảm kích thước tệp PNG nhưng vẫn giữ nguyên chất lượng ảnh theo cảm nhận.
- Nhờ chức năng nén giữ nguyên chất lượng trong quy trình xây dựng, công cụ aapt có thể tối ưu hoá các tài nguyên hình ảnh được đặt trong
res/drawable/
. Ví dụ: công cụ aapt có thể chuyển đổi tệp PNG màu thực không yêu cầu nhiều hơn 256 màu thành tệp PNG 8 bit với bảng màu. Nếu bạn làm như vậy, hình ảnh sẽ có chất lượng tương đương, nhưng mức sử dụng bộ nhớ sẽ giảm đi.