Chào mừng bạn đến với TiemDienThoai.com
Kiến thức · Bộ nhớ & Lưu trữ

Thuật toán Low Memory Killer (LMK) trên Android quyết định đóng ứng dụng nào trước dựa trên tiêu chí gì

Việc đóng ứng dụng nền không diễn ra ngẫu nhiên mà tuân theo chỉ số oom_adj, phân loại tiến trình và ngưỡng PSI mà LMKD giám sát liên tục.

Mục lục bài viết

Nhiều người dùng cho rằng việc hệ điều hành đóng ứng dụng chạy nền diễn ra ngẫu nhiên hoặc tuỳ tiện theo hãng máy. Trên thực tế, Android sử dụng một thuật toán xếp hạng cụ thể để quyết định tiến trình nào bị chấm dứt trước khi RAM căng thẳng, và cơ chế này vận hành theo những tiêu chí kỹ thuật rõ ràng chứ không phải chọn ngẫu nhiên.

Chỉ số oom_adj và oom_score_adj quyết định thứ tự ưu tiên

Mỗi tiến trình đang chạy trên Android được gán một giá trị gọi là oom_adj (out-of-memory adjustment), phản ánh mức độ quan trọng của tiến trình đó đối với trải nghiệm người dùng tại thời điểm hiện tại. Giá trị này do ActivityManager của hệ thống tính toán và cập nhật liên tục dựa trên trạng thái thực tế của ứng dụng, không cố định theo tên gói hay dung lượng bộ nhớ mà ứng dụng đang chiếm dụng. Tiến trình có giá trị oom_adj càng cao đồng nghĩa mức độ ưu tiên giữ lại càng thấp, và sẽ nằm trong danh sách bị xem xét đóng trước khi bộ nhớ khả dụng xuống thấp.

Các nhóm tiến trình được phân loại theo mức độ hiển thị và hoạt động

Hệ thống chia tiến trình thành nhiều lớp: tiến trình đang hiển thị trên màn hình (foreground), tiến trình có giao diện nhìn thấy một phần (visible), tiến trình dịch vụ đang hoạt động (service), tiến trình đã lùi vào nền nhưng còn giữ trạng thái (cached), và tiến trình trống không còn thành phần hoạt động (empty). Thứ tự đóng luôn bắt đầu từ nhóm ít quan trọng nhất là cached và empty, sau đó mới tính đến service nếu bộ nhớ vẫn thiếu hụt nghiêm trọng. Tiến trình foreground gần như không bao giờ bị đụng đến trừ khi hệ thống rơi vào tình trạng cạn kiệt bộ nhớ nghiêm trọng.

LMKD và ngưỡng bộ nhớ kích hoạt hành động đóng ứng dụng

Low Memory Killer Daemon (LMKD) là tiến trình nền theo dõi mức bộ nhớ khả dụng và quyết định thời điểm can thiệp. Các phiên bản Android hiện đại chuyển từ việc chỉ dựa vào ngưỡng RAM trống cố định sang sử dụng chỉ số PSI (Pressure Stall Information) của nhân Linux, đo lường thời gian các tiến trình phải chờ đợi vì thiếu tài nguyên bộ nhớ. Cách tiếp cận này giúp hệ thống phản ứng sớm hơn, trước khi tình trạng thiếu RAM thực sự gây giật lag, thay vì chỉ chờ đến khi bộ nhớ trống chạm đáy mới hành động.

Thời điểm sử dụng gần nhất ảnh hưởng đến thứ hạng ưu tiên

Trong cùng một nhóm phân loại, ứng dụng nào bị đẩy vào nền lâu hơn hoặc ít được tương tác gần đây sẽ có giá trị oom_adj cao hơn so với ứng dụng vừa mới rời khỏi màn hình chính. Đây là lý do ứng dụng vừa dùng xong thường được giữ lại lâu hơn, còn ứng dụng đã bị bỏ quên trong danh sách đa nhiệm nhiều giờ dễ bị chấm dứt trước, bất kể dung lượng bộ nhớ mà từng ứng dụng đang chiếm giữ là bao nhiêu.

Hiểu nhầm thường gặp

“ứng dụng nào chiếm nhiều RAM nhất sẽ bị đóng trước” là suy nghĩ không chính xác. Thuật toán LMK không xếp hạng theo dung lượng bộ nhớ mà một tiến trình đang sử dụng, mà xếp hạng theo vai trò và mức độ hiển thị của tiến trình đó với người dùng. Một ứng dụng nhẹ nhưng đã lùi vào trạng thái cached lâu ngày hoàn toàn có thể bị đóng trước một ứng dụng nặng hơn nhưng vẫn đang chạy dịch vụ nền quan trọng hoặc vừa được người dùng thao tác.

Xem thêm

Nội dung này thuộc cụm bài RAM vs RAM ảo: tổng hợp bài viết. Xem thêm Vì sao ứng dụng chạy nền tự động bị đóng dù còn nhiều RAM trống.

Hoàng Gia Bảo - kỹ thuật viên trưởng
Tác giả phụ trách chuyên mục

Kỹ thuật viên trưởng — Kỹ thuật viên trưởng tại trung tâm sửa chữa, trực tiếp chẩn đoán và xử lý hàng nghìn ca lỗi điện thoại mỗi năm.

Xem hồ sơ và chuyên môn →
Bình luận bài viết

Để lại bình luận

Thông tin liên hệ chỉ dùng để phản hồi, không hiển thị công khai.