Trình tắt ứng dụng khi bộ nhớ thấp

Nền tảng Android hoạt động trên cơ sở bộ nhớ trống là bộ nhớ bị lãng phí. Android luôn cố gắng sử dụng tất cả bộ nhớ có sẵn. Ví dụ: sau khi các ứng dụng đã đóng, hệ thống sẽ vẫn lưu giữ chúng trong bộ nhớ để người dùng có thể nhanh chóng chuyển về ứng dụng khi được mở lại. Vì lý do này, các thiết bị Android thường chạy với rất ít bộ nhớ trống (xem phần Phân bổ bộ nhớ Android tại đây).

Quy trình trình nền tắt ứng dụng khi bộ nhớ thấp (LMK) của Android giám sát trạng thái bộ nhớ của hệ thống Android đang chạy và phản ứng với áp lực bộ nhớ cao bằng cách tắt các quy trình ít thiết yếu nhất để duy trì hiệu suất của hệ thống ở mức chấp nhận được.

Để quyết định cần loại bỏ quy trình nào, trình nền LMK sẽ sử dụng điểm hết bộ nhớ được gọi là oom_adj_score để ưu tiên các quy trình đang chạy. Những quy trình có điểm cao sẽ bị xoá trước. Ứng dụng nền sẽ bị loại bỏ trước tiên; sau đó là các quy trình hệ thống. Bảng sau đây liệt kê các danh mục có điểm LMK từ cao đến thấp. Các mục trong danh mục có điểm số cao nhất ở hàng một sẽ bị xoá trước:

Các quy trình Android được xếp hạng từ điểm cao nhất đến điểm thấp nhất: Ứng dụng nền, ứng dụng trước, ứng dụng chính, dịch vụ, ứng dụng có thể nhận biết, ứng dụng trên nền trước, liên tục, hệ thống và gốc.
Hình 1. Các quy trình của Android, với điểm cao ở trên cùng và điểm thấp ở dưới cùng.

Chỉ số LMK trên Android vitals

Android vitals có thể giúp bạn theo dõi và cải thiện tỷ lệ LMK của ứng dụng. Android vitals chỉ đo lường một tỷ lệ LMK: Tỷ lệ LMK mà người dùng nhận thấy.

Chỉ số này phản ánh tỷ lệ phần trăm số người dùng hoạt động hằng ngày gặp phải ít nhất 1 lỗi LMK mà người dùng nhận thấy. Lỗi LMK mà người dùng nhận thấy là lỗi LMK mà có thể người dùng đã chú ý đến. Ví dụ: các lỗi LMK xảy ra trong khi ứng dụng của bạn cho thấy một hoạt động hoặc chạy dưới dạng một dịch vụ trên nền trước.

Bạn có thể tìm thấy chỉ số này trong phần Stability (Ổn định) trong Android vitals:

Hình 2. Truy cập vào Tỷ lệ lỗi LMK mà người dùng nhận thấy trong Android vitals.

Tương tự như các chỉ số quan trọng cốt lõi khác, chẳng hạn như lỗi ANR và sự cố, bạn có thể lọc các chỉ số, so sánh chỉ số của mình với chỉ số của ứng dụng ngang hàng hoặc theo dõi sự thay đổi của chỉ số trong một khoảng thời gian dài (tối đa 3 năm). Dữ liệu sẽ có sẵn cho các ứng dụng hiện có từ ngày 28 tháng 1 năm 2025.

Hình 3. Tổng quan về tỷ lệ lỗi LMK trong Android Vitals.

Công cụ phân tích bộ nhớ

Các công cụ sau đây có thể giúp bạn tìm và chẩn đoán các vấn đề về bộ nhớ theo những cách sau:

  • Xem cách ứng dụng của bạn phân bổ bộ nhớ theo thời gian. Bạn có thể tìm thấy biểu đồ theo thời gian thực về mức sử dụng bộ nhớ của ứng dụng, số lượng đối tượng Java được phân bổ và thời điểm thu gom rác.
  • Hãy bắt đầu các sự kiện thu thập rác và chụp nhanh vùng nhớ khối xếp Java trong khi ứng dụng của bạn chạy.
  • Ghi lại quy trình phân bổ bộ nhớ của ứng dụng, kiểm tra tất cả đối tượng được phân bổ và xem dấu vết ngăn xếp của từng lượt phân bổ.

Trình phân tích bộ nhớ trong Android Studio

Android Studio cung cấp Trình phân tích bộ nhớ dưới dạng một thành phần của Trình phân tích tài nguyên Android. Thành phần này giúp bạn xác định tình trạng rò rỉ bộ nhớ và nhồi nhét bộ nhớ có thể khiến ứng dụng của bạn kết xuất gián đoạn, bị treo và thậm chí gặp sự cố. Trình phân tích này cho bạn thấy biểu đồ theo thời gian thực về mức sử dụng bộ nhớ của ứng dụng, đồng thời cho phép bạn ghi lại tệp báo lỗi, buộc thu thập rác và theo dõi hoạt động phân bổ bộ nhớ.

Hình 4. Xem các lượt tham chiếu JNI toàn cục trong Trình phân tích bộ nhớ của Android Studio.

Công cụ phân tích bộ nhớ Unity

Nếu đang sử dụng Unity Engine để tạo ứng dụng, bạn có thể làm theo hướng dẫn phân tích bộ nhớ Unity. Unity cung cấp hai công cụ để phân tích mức sử dụng bộ nhớ trong ứng dụng của bạn.

Đầu tiên là mô-đun Trình phân tích bộ nhớ, một trình phân tích tích hợp sẵn cung cấp cho bạn thông tin cơ bản về vị trí ứng dụng sử dụng bộ nhớ.

Mô-đun bộ nhớ cho thấy các mức phân bổ bộ nhớ như bộ nhớ kết cấu và bộ nhớ lưới.
Hình 5. Cửa sổ Trình phân tích tài nguyên Unity với mô-đun Memory (Bộ nhớ) được chọn.

Công cụ thứ hai là gói Trình phân tích bộ nhớ. Đây là một gói Unity mà bạn có thể thêm vào dự án của mình. Gói này thêm một cửa sổ Trình phân tích bộ nhớ vào Trình chỉnh sửa Unity. Trình phân tích bộ nhớ cho phép bạn phân tích mức sử dụng bộ nhớ trong ứng dụng một cách chi tiết hơn. Bạn có thể lưu trữ và so sánh ảnh chụp nhanh để tìm sự cố rò rỉ bộ nhớ hoặc xem bố cục bộ nhớ để tìm vấn đề phân mảnh bộ nhớ.

Hình 6. Phân tích ảnh chụp nhanh bộ nhớ bằng cửa sổ Trình phân tích bộ nhớ.

Thông tin chi tiết về bộ nhớ Unreal

Các ứng dụng do Unreal Engine tạo có thể sử dụng tính năng Thông tin chi tiết về bộ nhớ Unreal để xem thông tin chi tiết về việc phân bổ và giải phóng bộ nhớ, bao gồm cả thẻ Bộ nhớ cấp thấp (LLM) và ngăn xếp lệnh gọi liên kết với các khối bộ nhớ.

Hệ thống truy vấn Thông tin chi tiết về bộ nhớ có thể tìm thấy các lượt phân bổ trực tiếp tại bất kỳ thời điểm nào, xác định các thay đổi về mức sử dụng bộ nhớ, xác định vị trí rò rỉ bộ nhớ và phân biệt các lượt phân bổ ngắn hạn với dài hạn.

Kể từ UE 5.4, tính năng Thông tin chi tiết về bộ nhớ hỗ trợ tính năng theo dõi bộ nhớ bằng ngăn xếp lệnh gọi cho các dự án Android.

Trình theo dõi Thông tin chi tiết về bộ nhớ hiển thị biểu đồ bộ nhớ chính, số lượng lượt phân bổ trực tiếp và số lượng sự kiện phân bổ/giải phóng.
Hình 6. Trình theo dõi Thông tin chi tiết về bộ nhớ của Unreal.

Tài nguyên khác