Như chúng ta đã biết, mỗi app khi được launch sẽ được chạy trên 1 process (tiến trình) có chứa 1 main thread
(app sẽ mặc định thực thi trên luồng này). Thêm nữa, các thiết bị vật
lí cấu tạo nên chiếc smart phone hay tablet... đều có giới hạn nhất định
của nó. Ví dụ như khi bạn sử dụng điện thoại quá lâu thì tình trạng tệ
nhất là sẽ sập nguồn đúng không nào . Cũng tương tự như vậy thì memory
của máy cũng không phải là vô hạn, khi bạn sử dụng quá nhiều app cùng 1
lúc gây ra tiêu tốn rất nhiều memory của máy khiến nó không thể đáp ứng
được hết. Vậy lúc này hệ thống sẽ phải xử lí thế nào đây? Vâng. Chắc chắn rồi, những lúc thế này hệ thống sẽ buộc phải kill đi 1 số process
để có thể đòi lại tài nguyên phải không nào? Nó là 1 nguyên tắc rất đơn
giản mà ta có thể dễ dàng nhận thấy trong cuộc sống đó là: Muốn có thành công thì bắt buộc phải có sự hi sinh ) Nhưng hi sinh như thế nào mới là hiệu quả, đúng đắn?? Chúng ta hãy cùng nhau tìm hiểu qua bài viết này nhé! )

Như chúng ta cũng thấy, trong Android sẽ chia process thành 5 loại theo thứ tự ưu tiên:
Những processes này được lưu trữ trong pseudo-LRU list, nơi mà process cuối cùng trong list sẽ được kill đầu tiên. Đó là cơ chế mặc định, nhưng thường thì hệ thống sẽ chọn cách xử lí thông minh hơn đó là giữ lại những process thông qua độ hữu ích của nó. Ngoài ra chúng ta cũng có thể set số lượng giới hạn cho processes loại này và thời gian sống của nó.
Cây phân cấp Android process
Trước tiên hãy cùng xem qua hình ảnh dưới này nhé!
Như chúng ta cũng thấy, trong Android sẽ chia process thành 5 loại theo thứ tự ưu tiên:
- Foreground
- Visible
- Service
- Background
- Empty
Foreground processes
Là những processes mà người dùng hiện đang tương tác đến. Đây là yếu tố quan trọng sẽ quyết định đến sự sống còn của process. Lấy ví dụ như- Activity đang ở trạng thái onResume()
- BroadcastReceiver đang running
- Service đang thực hiện ở các hàm onCreate(), onStart(), onDestroy()
Visible processes
Là những process thực hiện các công việc mà user đang chú ý đến. Nghe có vẻ giông giống cái thằng ở trên nhỉ. Nhưng nếu đọc kĩ 1 chút bạn sẽ thấy 1 sự khác biệt nhỏ giữa chúng. 1 thằng là user đang trực tiếp tương tác(có thể k nhìn thấy), còn 1 thằng là user nhìn thấy nhưng hiện giờ không interact với nó. Thường thì 1 vài trường hợp sau sẽ là visible processes- Activity được nhìn thấy nhưng không tương tác được ( đang ở onPause() )
- Service đang ở foreground
- Process đó đang hosting 1 service được sử dụng để đáp ứng 1 tính năng cụ thể nào đó cho user
Service processes
Là process giữ tham chiếu đến 1 service, và không trực tiếp được nhìn thấy bởi user. Thường thì những thằng này sẽ làm những việc như upload data, download,... Nếu process này chạy quá lâu (quá 30 phút) thì nó sẽ bị giảm độ ưu tiênCache processes (background+empty)
Là các processes mà user không chú ý đến và hệ thống có thể kill mấy thằng loại này 1 cách thoải mái khi thiếu memory. Những process loại này thường giữ 1 hoặc nhiều activity instance mà user không chú ý đến (onStop()).Những processes này được lưu trữ trong pseudo-LRU list, nơi mà process cuối cùng trong list sẽ được kill đầu tiên. Đó là cơ chế mặc định, nhưng thường thì hệ thống sẽ chọn cách xử lí thông minh hơn đó là giữ lại những process thông qua độ hữu ích của nó. Ngoài ra chúng ta cũng có thể set số lượng giới hạn cho processes loại này và thời gian sống của nó.
Comments
Post a Comment