Tôi biết đây là câu hỏi được hỏi nhiều lần. Tuy nhiên có một cái gì đó tôi không bao giờ tìm thấy một câu trả lời cho. Vì vậy, hy vọng ai đó có thể cho tôi một số ánh sáng.Android AsyncTask vs Chủ đề + Handler vs rxjava
Chúng ta đều biết rằng AsyncTask và Thread là các tùy chọn để thực hiện các tác vụ nền để tránh vấn đề ANR. Chúng tôi khuyên bạn chỉ nên sử dụng asynctask cho các tác vụ chạy ngắn trong khi chuỗi có thể được sử dụng cho các tác vụ dài hạn. Những lý do tại sao asynctask không nên được sử dụng cho các tác vụ dài là nổi tiếng mà là về sự rò rỉ có thể gây ra bởi asynctask vì nó có thể tiếp tục chạy sau khi một hoạt động bị phá hủy. Đó là thuyết phục. Tuy nhiên, nó cũng dẫn đến một số câu hỏi khác:
- Chủ đề không còn độc lập với vòng đời hoạt động? Do đó, rủi ro với asynctask cũng có thể được áp dụng cho luồng. Vậy tại sao luồng chỉ phù hợp cho các tác vụ dài hạn?
- Dường như nguy cơ asynctask chỉ áp dụng khi sử dụng nó với hoạt động. Nếu chúng ta sử dụng nó trong dịch vụ (không phải IntentService vì IntentService dừng sau khi công việc của nó hoàn thành), và miễn là chúng ta có thể đảm bảo hủy bỏ asyntask khi dịch vụ dừng lại, chúng ta có thể sử dụng nó cho các tác vụ dài hạn không? và nó không có nghĩa là nó có nguy cơ miễn phí để sử dụng asynctask trong các dịch vụ?
- Tôi đã chơi với rxjava một lúc và thực sự thích nó. Nó giúp loại bỏ sự cần thiết phải lo lắng về luồng (trừ khi bạn phải quyết định trong đó thread để đăng ký và quan sát dữ liệu phát ra). Từ những gì tôi có thể thấy, rxjava (kết hợp với một số libs khác như retrofits) có vẻ là một sự thay thế hoàn hảo của asynctask và thread. Tôi tự hỏi nếu chúng ta hoàn toàn có thể quên chúng hoặc có bất kỳ trường hợp cụ thể mà rxjava không thể đạt được những gì asynctask và thread có thể làm điều đó tôi cần phải nhận thức?
Cảm ơn
Cảm ơn câu trả lời. Vì vậy, nó có nghĩa là sử dụng rxjava thay vì Asynctask và Thread luôn luôn? Bạn có thể vui lòng làm rõ những gì bạn có nghĩa là "cẩn thận" trong câu trả lời? Cảm ơn –