0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Tìm Hiểu Về Process Trong Android: Khái Niệm, Mức Độ Ưu Tiên và Giao Tiếp Giữa Các Process

Đăng vào 1 tuần trước

• 4 phút đọc

Giới Thiệu về Process Trong Android

Process là một khái niệm cực kỳ quan trọng trong hệ điều hành Android, ảnh hưởng trực tiếp đến cách mà các ứng dụng hoạt động. Khi chúng ta khởi chạy một ứng dụng, theo mặc định, tất cả các thành phần như Activity, Service, BroadcastReceiverContentProvider sẽ chạy trên cùng một Linux Process. Tuy nhiên, nếu cần thiết, bạn có thể khai báo một Process riêng biệt trong file AndroidManifest như sau:

xml Copy
<activity
    android:process="new_process_name"
    ...>
</activity>

Mặc định, tên process thường trùng với app ID được khai báo trong tệp build.gradle. Điều này có nghĩa là cả ứng dụng và các thành phần chính đều có thể có tag android:process. Nếu bạn chỉ định android:process cho tag <application>, tên process đó sẽ được áp dụng cho tất cả các thành phần của ứng dụng.

Mức Độ Ưu Tiên Của Các Process

Android không cho phép chúng ta quản lý thời gian sống của Process. Hệ thống sẽ tự động tính toán các component nào đang hoạt động, mức độ quan trọng của chúng đối với người dùng, và lượng bộ nhớ còn lại để quyết định thời gian sống của mỗi Process.

Khi tài nguyên của Android không đủ, hệ thống sẽ tự động dừng một Process và tất nhiên, tất cả các component đang chạy trên Process đó cũng sẽ bị hủy. Vậy yếu tố nào quyết định Process nào sẽ bị dừng lại? Android đã phân loại chúng thành 4 loại với mức độ ưu tiên khác nhau:

1. Foreground Process

Đây là loại Process có mức độ ưu tiên cao nhất, chứa các component mà người dùng đang tương tác, ví dụ:

  • Activity đang hiển thị và thực hiện các tác vụ, với method onResume() đã được gọi.
  • BroadcastReceiver đang xử lý một intent, với method onReceive() đang thực thi.
  • Service đang chạy trong các callback như: onCreate(), onStart(), hoặc onDestroy().

Chỉ có một số ít Process kiểu này trong hệ thống, và chúng chỉ bị tắt khi bộ nhớ quá thấp.

2. Visible Process

Process này thực hiện các tác vụ mà người dùng có thể nhận biết. Việc dừng chúng sẽ ảnh hưởng đến trải nghiệm người dùng, chẳng hạn:

  • Activity đang hiển thị trên màn hình nhưng không còn ở foreground, như khi có một Activity khác hiện lên dưới dạng dialog.
  • Foreground Service đang hoạt động và được người dùng nhận thấy.

3. Service Process

Type này chứa một Service được khởi chạy bằng method startService(). Người dùng không trực tiếp thấy nó, nhưng nó thực hiện các tác vụ nền như tải hoặc tải lên dữ liệu. Nếu chạy lâu hơn 30 phút, các Service này có thể bị giảm mức độ ưu tiên.

4. Cached Process

Đây là các Process không còn được cần đến và hệ thống có thể dễ dàng loại bỏ chúng để giải phóng bộ nhớ. Hệ thống sẽ quản lý các Process này bằng cách sử dụng LRU Cache (Least Recently Used Cache) để giữ lại những Process ít được sử dụng nhất trong thời gian gần đây.

Giao Tiếp Giữa Các Process (IPC)

Inter-Process Communication (IPC), hay Giao tiếp giữa các tiến trình, là cơ chế giúp các Process trong Android giao tiếp và đồng bộ hóa hành động của họ. Mỗi app chạy trong một Process riêng, nhưng khi cần chia sẻ dữ liệu hoặc thực hiện các tác vụ kết hợp, IPC cung cấp các phương thức an toàn và hiệu quả.

Các Cơ Chế Giao Tiếp IPC

1. Intent

Intent được sử dụng phổ biến nhất để giao tiếp bất đồng bộ giữa các ActivityBroadcastReceiver. Bạn có thể sử dụng sendBroadcast, sendOrderedBroadcast, hoặc explicit intent tùy theo tình huống cụ thể.

2. Android Interface Definition Language (AIDL)

AIDL giúp định nghĩa các interface giữa các ứng dụng Android, cho phép chúng giao tiếp một cách an toàn và hiệu quả, bất kể ngôn ngữ lập trình.

3. Messenger

Messenger là một class trong Android SDK cho phép giao tiếp giữa các ứng dụng thông qua việc gửi và nhận tin nhắn. So với AIDL, Messenger chỉ hỗ trợ các tác vụ tuần tự (sequential) trong khi AIDL hỗ trợ các tác vụ đồng thời (concurrent).

4. Broadcast Receiver

BroadcastReceiver xử lý các yêu cầu bất đồng bộ từ Intent và mặc định có thể được gọi bởi bất kỳ ứng dụng nào khác. Nếu muốn bảo vệ BroadcastReceiver chỉ cho ứng dụng của bạn, bạn có thể áp dụng bảo mật thông qua tag <receiver> trong AndroidManifest.

Kết Luận

Nắm rõ các khái niệm về Process và giao tiếp giữa các Process trong Android rất quan trọng để phát triển ứng dụng hiệu quả. Chọn đúng thành phần cho các use-case của bạn là chìa khóa để tối ưu hóa hiệu suất và trải nghiệm người dùng.

Tài Liệu Tham Khảo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào