Đây là một câu hỏi khá mở, nhưng hãy để tôi chụp ảnh mô tả cách tôi thấy giao tiếp ứng dụng nội bộ/liên kết hoạt động tốt nhất.
Một trong những khía cạnh quan trọng của nhắn tin Android là khái niệm về tất cả các thành phần ứng dụng bị ràng buộc lỏng lẻo. Bởi vì tất cả các ứng dụng đều chạy trong một tiến trình riêng biệt và một 'ứng dụng' thực sự có thể bao gồm một số ứng dụng (chịu trách nhiệm cung cấp các Hoạt động hoặc Dịch vụ khác nhau), tất cả các kỹ thuật nhắn tin đều dựa trên ý tưởng về các thông điệp marshaling trên các ranh giới quy trình.
Intents
Kỹ thuật ưa thích để nhắn tin, luôn luôn cố gắng sử dụng Intent bất cứ khi nào có thể. Đó là cách "bản địa" nhất để truyền tải thông điệp trong Android.
Ưu
Sử dụng Intents để nhắn tin duy trì ràng buộc lỏng lẻo của các thành phần ứng dụng, cho phép bạn chuyển các tin nhắn liên tục giữa nhiều ứng dụng. Mục đích được sử dụng rất nhiều trong hệ thống cốt lõi để bắt đầu các hoạt động và dịch vụ, và để phát sóng và nhận các sự kiện hệ thống.
Sử dụng tính năng bổ sung Gói bạn có thể bao gồm cặp khóa/giá trị nguyên thủy làm dữ liệu tải trọng trong Intents để dễ dàng truyền thông tin từ thành phần ứng dụng này sang thành phần khác - ngay cả khi các thành phần đó đang chạy trong các quy trình khác nhau.
Nhược
Vì Intents được thiết kế để đi giữa các quá trình, các tải trọng tính năng bổ sung chỉ hỗ trợ các kiểu dữ liệu. Nếu bạn cần gửi một đối tượng bằng cách sử dụng Intent, bạn sẽ cần phải deconstruct nó thành primitives ở một đầu và tái tạo nó ở đầu kia.
Application Lớp
Nếu bạn chỉ muốn giao tiếp trong một ứng dụng duy nhất chạy trong một quá trình duy nhất này là một giải pháp tiện dụng.
Ưu
Bằng cách mở rộng các lớp Application
(và thực hiện nó như là một Singleton) bạn sẽ có được một đối tượng mà sẽ tồn tại bất cứ khi nào các thành phần ứng dụng của bạn tồn tại, cung cấp một nơi tập trung để lưu trữ và truyền dữ liệu đối tượng phức tạp giữa các thành phần ứng dụng.
Nhược
Kỹ thuật này hạn chế tin nhắn của bạn với các thành phần trong một ứng dụng duy nhất.
Dịch vụ Binding, IPC và AIDL
Ràng buộc vào một dịch vụ cho phép bạn truy cập vào các phương pháp của nó và các đối tượng trao đổi với nó. AIDL là một cách xác định làm thế nào để tuần tự hóa một đối tượng vào các nguyên bản của hệ điều hành để nó có thể được sắp xếp theo ranh giới quy trình nếu Dịch vụ mà bạn đang ràng buộc đang chạy trong một ứng dụng riêng biệt.
Ưu
Khi bạn liên kết với một dịch vụ bạn có quyền truy cập vào nó như thể nó là một đối tượng trong lớp gọi. Điều đó có nghĩa là bạn có thể thực hiện các phương thức trên Dịch vụ và trao đổi các đối tượng phong phú với nó. Lưu ý rằng nếu bạn đang ràng buộc với một Dịch vụ trong một quy trình ứng dụng khác, bạn sẽ cần tạo các định nghĩa AIDL cho Android biết cách tính toán/deserialize bất kỳ đối tượng nào bạn muốn chuyển giữa các ứng dụng.
Nhược
Tạo các lớp AIDL cho IPC là một chút công việc phụ, và ràng buộc tạo ra phụ thuộc bổ sung giữa dịch vụ và các hoạt động có thể làm cho nó khó khăn hơn cho các hạt nhân để làm sạch nguồn khi các ứng dụng khác đang được đói.
Thông điệp khắc phục trên các ranh giới quá trình là tốn kém. Vì vậy, nếu bạn không thực hiện các phương thức trên một Dịch vụ, việc sử dụng ràng buộc và IPC có thể là quá mức cần thiết - hãy xem bạn có thể đạt được điều tương tự bằng cách sử dụng Intents hay không.
Sockets
Nếu bạn đang phải dùng đến ổ cắm để giao tiếp trong hoặc giữa các ứng dụng đang chạy trên một thiết bị duy nhất, nó là một trong hai vì không có cách nào khác hoặc bạn đã bỏ lỡ một thủ thuật nào đó. Nếu tin nhắn của bạn đang rời khỏi thiết bị thì ổ cắm là một lựa chọn tốt, nhanh chóng, thay thế. Nếu bạn đang ở trên cơ hội thiết bị là Intents hoặc IPC sẽ là một lựa chọn tốt hơn.
+1 đây là câu trả lời lý tưởng có thể được sử dụng làm câu trả lời tiêu chuẩn trên toàn cộng đồng ..... – aProgrammer