Sự khác biệt giữa BroadcastReceiver và Kết quả nhận được trong Android là gì?Bộ thu phát và kết quả nhận được trong android
Trả lời
quả Receiver:
Generic interface for receiving a callback result from someone.
Broadcast Receiver:
Base class for code that will receive intents sent by sendBroadcast().
EDIT:
Bối cảnh: Tất cả các hoạt động mạng/dài hoạt động chạy nên diễn ra cách xa chủ đề chính. Hai cách để làm điều này:
- Async nhiệm vụ - Đối với mạng đơn giản như nói truy xuất hình ảnh/làm db chế biến
- Dịch vụ - Đối với quá trình nền Complex dài chạy
Nếu bạn cần phải thực hiện làm việc bên ngoài chủ đề chính của bạn, nhưng chỉ khi người dùng tương tác với ứng dụng của bạn, thì có lẽ bạn nên tạo một chuỗi mới chứ không phải một dịch vụ. Ví dụ: nếu bạn muốn phát một số bản nhạc nhưng chỉ khi hoạt động của bạn đang chạy, bạn có thể tạo một Chủ đề không đồng bộ. Nhưng nếu bạn muốn quá trình này tiếp tục ngay cả sau khi người dùng thoát khỏi ứng dụng (chẳng hạn một download) sau đó sử dụng một dịch vụ
Cho phép nói rằng bạn chọn 2. Bây giờ
- Bạn hoạt động gửi một yêu cầu web dịch vụ của bạn
- Dịch vụ của bạn thực hiện bằng cách sử dụng nói DefaultHttpClient
Nó sẽ gửi lại dữ liệu cho hoạt động của bạn.
Bước thứ ba nhận dữ liệu ở đây có thể được thực hiện theo hai cách
1.) Broadcast receiver: Nhiều người nhận có thể nhận được dữ liệu của bạn. Được sử dụng nếu bạn muốn gửi dữ liệu/thông báo trên các ứng dụng (nói rằng bạn cũng đang tương tác với fb và twitter, nhiều người nhận để phát trên web), bất cứ khi nào bạn gửi phát rộng hệ thống đã gửi.
2.) Bộ thu kết quả: Ứng dụng của bạn là người nhận dữ liệu duy nhất. Nó là một Giao diện mà bạn triển khai và chuyển nó tới intentService thông qua putExtra. IntentService sau đó sẽ tìm đối tượng này và gọi hàm receive.send của nó để gửi bất kỳ thứ gì (trong gói) đến hoạt động gọi điện.Kết quả thu có ưu tiên hơn thu phát sóng nếu tất cả các thông tin liên lạc của bạn là nội bộ để ứng dụng của bạn
EDIT: Tôi cũng nên đề cập đến thận trọng này
Thận trọng: Một dịch vụ chạy trong các chủ đề chính của quy trình lưu trữ của nó — dịch vụ không tạo chủ đề riêng và không chạy trong quy trình riêng biệt (trừ khi bạn chỉ định khác). Điều này có nghĩa là, nếu dịch vụ của bạn sẽ thực hiện bất kỳ hoạt động hoặc hoạt động chặn nào của CPU (chẳng hạn như phát lại hoặc kết nối MP3), bạn nên tạo một chủ đề mới trong dịch vụ để thực hiện công việc đó. Bằng cách sử dụng một sợi riêng biệt, bạn sẽ giảm nguy cơ lỗi ứng dụng không ứng phó (ANR) và luồng chính của ứng dụng có thể vẫn dành riêng cho tương tác người dùng với các hoạt động của bạn.
Hai lớp này là hoàn toàn khác nhau. Đó thực sự là sự khác biệt giống như giữa Phát sóng và Kết quả.
- nội dung phát sóng? Nói một cách đơn giản, đó là một số thông điệp có thể nhìn thấy toàn bộ hệ thống và nó có thể được tiêu thụ bởi mọi phần của hệ thống (mà biết hợp đồng), nó không có nguồn gốc từ smb reuest;
- Kết quả là gì? Đó là điều chúng tôi mong đợi nhận được từ một phần khác của hệ thống. Thông thường chỉ có một người nhận cho kết quả và thường người nhận đã yêu cầu xử lý để có được kết quả (cảm thấy sự khác biệt - đối với phát sóng không ai cần phải làm bất kỳ 'yêu cầu' để cho nó có nguồn gốc);
Đó là giải thích từ quan điểm logic. Từ quan điểm mã nếu bạn sẽ so sánh BroadcastReceiver và ResultReceiver Bạn có thể quan sát sự khác biệt rất lớn. Về cơ bản cả hai lớp được xây dựng trên đầu trang của IPC nhưng BroadcastReceiver phức tạp hơn nhiều vì nó là bản chất khác nhau (mà tôi đã cố gắng giải thích ở phần đầu).
Wheteher cả hai người nhận đều có thể hỗ trợ yêu cầu và phản hồi HTTP Async ? – user1670564
hm, tôi nghĩ không, bởi vì cả hai đều không phải về yêu cầu HTTP. Nếu bạn cần, bạn có thể gửi kết quả từ dịch vụ của bạn hoặc tác vụ không đồng bộ bằng cách sử dụng bất kỳ công cụ nào trong số đó. Nhưng đối với AsyncTask Bạn chỉ có thể sử dụng Handler. – sandrstar
BroadcastReceiver là người nhận nhận chương trình phát sóng. Những người được gửi bởi một ai đó trong ý định rằng có thể có nhiều người nhận nhận được chúng (như chương trình phát thanh).
Mặt khác, trình nhận kết quả nhằm nhận kết quả gọi lại từ một người nào đó. Vì vậy, điều này có thể được so sánh với một walkie talkie, nơi bạn gọi một ai đó và sau đó sẽ nhận được một câu trả lời (một kết quả) từ một trong những bạn gọi.
Cảm ơn bạn đã trả lời! Ví dụ hay để hiểu ... – user1670564
Broadcast Receiver
Một máy thu phát sóng là một thành phần phản ứng với thông báo phát sóng trên toàn hệ thống. ví dụ, một phát sóng thông báo rằng màn hình đã tắt, pin yếu hoặc chụp ảnh. Các ứng dụng cũng có thể khởi tạo chương trình phát sóng — ví dụ, để cho các ứng dụng khác biết rằng một số dữ liệu đã được tải xuống thiết bị và có sẵn để chúng sử dụng. Mặc dù máy thu phát không hiển thị giao diện người dùng, họ có thể tạo thông báo trên thanh trạng thái để cảnh báo người dùng khi sự kiện phát sóng xảy ra. Hơn nữa, mặc dù, một máy thu phát sóng chỉ là một "cửa ngõ" cho các thành phần khác và được dự định để làm một số lượng rất tối thiểu của công việc. Ví dụ, nó có thể bắt đầu một dịch vụ để thực hiện một số công việc dựa trên sự kiện này.
quả Receiver
Nếu dịch vụ của bạn sẽ trở thành một phần của bạn ứng dụng sau đó bạn đang làm nó theo cách phức tạp hơn nó cần phải được. Vì bạn có trường hợp sử dụng đơn giản để nhận một số dữ liệu từ Dịch vụ web an toàn, bạn nên xem xét ResultReceiver và IntentService.
Mẫu ServiceReceiver + Service này hoạt động bằng cách bắt đầu hoặc liên kết với dịch vụ bằng startService() khi bạn muốn thực hiện một số hành động. Bạn có thể chỉ định hoạt động để thực hiện và truyền trong ResultReceiver của bạn (hoạt động) thông qua các tính năng bổ sung trong Intent.
Thay vì AsyncTask, tôi có sử dụng cuộc gọi webservice Async này không? – user1670564
Bạn có thể nên ghi có vào các từ bạn sao chép + dán từ Robby Pond tại đây: http://stackoverflow.com/a/3197456/1738090 – w3bshark
- 1. Bộ phận thu phát và phát sóng
- 2. Thẻ NFC Android nhận được với bộ phát sóng
- 3. bộ thu phát sóng cho cuộc gọi nhỡ trong android
- 4. jQuery AJAX: thu thập nhiều kết quả không đồng bộ
- 5. Bộ thu phát sóng động trong Fragment
- 6. widget cập nhật android từ bộ thu sóng phát sóng
- 7. C# thực hiện lệnh shell và nhận được kết quả
- 8. Cách sắp xếp kết quả thu được bằng grep -c?
- 9. android: bộ thu phát sóng cho màn hình bật và tắt màn hình
- 10. Bộ thu phát sóng onReceive() được gọi nhiều lần
- 11. là nhiều máy thu phát hợp pháp trong android?
- 12. Nhận kết quả của phương thức không đồng bộ
- 13. Trình cài đặt gói Android - cách nhận được kết quả hoạt động "Mở" và "Xong" và hoạt động cả hai?
- 14. Android - được cấp phát bộ nhớ
- 15. Có thể viết bộ thu phát sóng Android phát hiện khi điện thoại thức dậy không?
- 16. Khởi động và ngừng thu phát sóng
- 17. Nhận kết quả từ XP_CMDSHELL
- 18. Trình quản lý báo động Android với bộ thu phát sóng được đăng ký trong mã thay vì hiển thị
- 19. Phát triển trò chơi Android và Bộ sưu tập rác
- 20. [Android] Cách nhận kết quả từ mục đích được khởi chạy từ màn hình tùy chọn?
- 21. Charset.defaultCharset() nhận kết quả khác dưới JDK1.7 và JDK 1.6
- 22. C#: Tìm kiếm một văn bản trong Word và nhận được nhiều kết quả
- 23. Làm thế nào để tách một chuỗi và nhận được kết quả cuối cùng trong jQuery?
- 24. Bộ kết quả PDO được lưu trữ như thế nào
- 25. hoạt động Phát hiện được bắt đầu cho kết quả
- 26. Android OpenGL ES 2.0: Không nhận được kết quả tôi muốn với Matrix.traslateM
- 27. Hiệu quả của bộ thu gom rác .NET
- 28. Android Bluetooth: Nhận UUID của thiết bị được phát hiện
- 29. Hoàn thành một Hoạt động từ Bộ thu Phát sóng
- 30. Gọi hàm nhiều lần và nhận danh sách kết quả
Cái nào là tốt nhất cho quá trình nối mạng dài? Ví dụ: Tải xuống tệp, phân tích cú pháp JSON.etc – user1670564
Xem câu trả lời hàng đầu tại đây: http://stackoverflow.com/questions/3197335/restful-api-service để hiểu mô hình dịch vụ thu + kết quả. Nó cung cấp cho một trường hợp sử dụng thực sự tốt của ứng dụng – Slartibartfast
Cảm ơn bạn đã trả lời. Tôi đã đi qua liên kết. Một khi vượt qua liên kết tôi có nghi ngờ trong cả hai người nhận. Cả hai bộ thu đều hỗ trợ các tác vụ chạy dài. Ở tình huống nào tôi cần sử dụng Broadcast và kết quả. – user1670564