Đa nhiệm trên android hoạt động như thế nào

Category: IT Published: 09 March 2014
Hits: 4911

Bài viết này nói về cách mà Android thực hiện đa nhiệm, cũng như nêu ra một số ưu điểm nhược điểm của nó.

Hệ điều hành android từ khi ra đời đã tích hợp bên trong một cơ chế đa nhiệm khá gần với máy tính, nó cho phép ứng dụng chạy nền để thực hiện các tác vụ mà không nhất thiết phải hiển thị trên màn hình (foreground). Từ android 4.0 Ice Cream Sandwich, google đã thực hiện một thay đổi lớn khi thiết kế một giao diện đa nhiệm mới thân thiện và tiện dụng hơn với người dùng. Giao diện đa nhiệm mới vẫn thể hiện một danh sách các ứng dụng sử dụng gần đây (recent apps), nhưng ở dạng thẻ, lưu lại hình chụp màn hình của những app đó, kèm theo biểu tượng (icon) và tên ứng dụng. Nó cũng cho phép vuốt lên xuống để xem danh sách, vuốt ngang thẻ để xóa app ra khỏi danh sách, rất nhanh và tiện lợi. Nó cho người dùng cảm giác họ đang quản lý đa nhiệm.

Giờ ta sẽ đi sâu hơn vào cơ chế. Trong bộ nhớ (ram) có các trạng thái phổ biến như sau:

-Foreground: ứng dụng đang chạy, hiển thị trên màn hình

-Nền (background): ứng dụng đang chạy ngầm, không hiển thị trên màn hình, nhưng vẫn thực hiện lệnh (vi xử lý vẫn hoạt động)

-Suspended: ứng dụng được lưu vào phần cache, vẫn chạy nhưng không thực hiện lệnh. Có thể coi như chúng đang ngủ.

-Không chạy (not running): ứng dụng chưa được khởi động, hoặc đã được tắt hoàn toàn (không còn lưu ở trong ram)

Ở android, khi nhấn nút home, ứng dụng không bị chuyển về trạng thái suspended gần như ngay lập tức như trên ios, mà chỉ bị đưa vào background. Do đó, nó vẫn được phép thực hiện các lệnh như bình thường, chỉ là chúng ta không nhìn thấy mà thôi. Một ứng dụng android có thể sử dụng nhiều tiến trình (process), nhiều ứng dụng cũng có thể chia sẻ một tiến trình. Khi người dùng muốn trở lại một ứng dụng mà họ vừa thoát ra, tiến trình sẽ được khôi phục về foreground gần như ngay lập tức.

Về lý thuyết, nếu bộ nhớ của android là vô hạn, thì các tiến trình sẽ ở lại trong ram vĩnh viễn. Nhưng trên thực tế, thiết bị sẽ nhanh chóng bị đầy ram. Khi đó, hệ thống sẽ tự động kết thúc các tiến trình để giải phóng ram. Như vậy, ứng dụng sẽ phải tải lại hoàn toàn khi ta tái khởi động nó. Do đó, ứng dụng có thể còn xuất hiện trong recent apps, nhưng nó không còn hoạt động nền nữa.

Trong các phiên bản android gần đây, việc quản lý ram đã trở nên thông minh hơn nhiều. Chúng ta không cần thiết phải sử dung các task killer để giúp hệ thống hoạt động trơn tru hơn.

Các ứng dụng trong android có thể tránh việc bị xóa khỏi nền (background) bằng cách tương tự như trên ios với các hàm Background API giới hạn: thành phần BroadcastReceiver cho phép ứng dụng hoạt động lại một khoảng ngắn để thực hiện một vài tác vụ (task), sau đó lại buộc nó trở về trạng thái nền. Các tác vụ đồng bộ hóa (syncing) và vị trí (location check-in) hoạt động thế này. Một cách khác nữa để giữ ứng dụng trong nền là sử dụng các dịch vụ (service): một ứng dụng chạy như một dịch vụ có thể tồn tại không giới hạn ở trong nền và gần như không bị xóa bởi hệ thống. Điều này khiến cho đa nhiệm của android đặc biệt, các tiến trình thường sẽ bị kết thúc trước các dịch vụ, và các dịch vụ quan trọng có thể được đánh dấu chạy ở foreground bằng các biểu tượng trên thanh thông báo trạng thái (Vd: điển hình ta có thể thấy ở trình nghe nhạc, quản lý pin,…).

Như vậy, ta có thể thấy android cũng tự động đóng các tiến trình không cần thiết, nhưng nó cho các lập trình viên thêm một vài lựa chọn để chạy ứng dụng trong nền, nhằm tăng trải nghiệm đa nhiệm cho người dùng. Tuy nhiên, nếu bộ nhớ bị giới hạn, thì tiến trình có thể bị xóa bất cứ lúc nào. Hơn nữa, ở android, bộ nhớ (ram) trống nhiều không phải là tốt, mà là lãng phí tài nguyên. Việc chạy ngầm nhiều ứng dụng trong ram giúp thực thi các lệnh cần thiết một các đa nhiệm và giúp tái khởi động ứng dụng nhanh hơn. Tất nhiên, với những ứng dụng không cần thiết thì người dùng có thể ngăn chúng chạy ngầm (dẫn tới đầy ram) bằng nhiều thủ thuật.

Tóm lại, cách quản lý bộ nhớ của android khác với ios và hay theo cách riêng của nó. Mong rằng bài viết này sẽ giúp các bạn hiểu thêm phần nào về android.

(bài gốc “How multitasking really works on Android and iOS” của Ryan Whitwan)

Tạ Quang Dũng
Author: Tạ Quang Dũng
About: Student, study Metallic Materials at School of Materials Science and Engineering, Hanoi UST

Donate

Donate using PayPal
Amount: