AsyncTaskLoader so với AsyncTask


129

Honeycombv4 Compatibility Librarynó có thể sử dụng AsyncTaskLoader. Từ những gì tôi hiểu, AsyncTaskLoadercó thể tồn tại thông qua thay đổi cấu hình như lật màn hình.

Có nên sử dụng AsyncTaskLoaderthay vì AsyncTask? Có LoaderManagernhận được trong hình ảnh quá?

Nhưng tôi không tìm thấy bất kỳ ví dụ hay nào về cách sử dụng chính xác AsyncTaskLoader. Các tài liệu cũng không cung cấp ví dụ. Bất cứ ai có thể cung cấp một số ví dụ tốt.

Câu trả lời:


51

Bạn có thể xem mã nguồn của thư viện tương thích để có thêm thông tin. Những gì FragmentActivitylàm là:

  • giữ một danh sách các LoaderManager's
  • đảm bảo chúng không bị phá hủy khi bạn lật điện thoại (hoặc xảy ra thay đổi cấu hình khác) bằng cách lưu các trường hợp sử dụng onRetainNonConfigurationInstance()
  • đá đúng trình tải khi bạn gọi initLoader()trong Hoạt động của mình

Bạn cần sử dụng LoaderManagergiao diện với các trình tải và cung cấp các cuộc gọi lại cần thiết để tạo (các) trình tải của bạn và điền vào các khung nhìn của bạn với dữ liệu họ trả về.

Nói chung, nó sẽ dễ dàng hơn việc quản lý AsyncTaskchính bạn. Tuy nhiên, AsyncTaskLoaderkhông chính xác là tài liệu tốt, vì vậy bạn nên nghiên cứu ví dụ trong các tài liệu và / hoặc mô hình mã của bạn sau CursorLoader.


5
Tôi sẽ có một cái nhìn về điều này. Có lẽ còn quá sớm để tìm ra những ví dụ AsyncTaskLoaderhay và khi nhiều nhà phát triển bắt đầu sử dụng nó, sẽ có nhiều ví dụ hơn.
OKA

47

Khi so sánh AsyncTaskLoader với AsyncTask , như bạn có thể biết khi bạn xoay màn hình thiết bị, nó có thể phá hủy và tạo lại hoạt động của bạn, để làm cho nó rõ ràng cho phép xoay hình ảnh của thiết bị trong khi giao dịch mạng đang diễn ra:

AsyncTask sẽ được thực hiện lại dưới dạng luồng nền một lần nữa và quá trình xử lý luồng nền trước đó chỉ là dự phòng và zombie.

AsyncTaskLoader sẽ chỉ được sử dụng lại dựa trên ID Trình tải đã đăng ký trong Trình quản lý trình tải trước đó, vì vậy tránh thực hiện lại giao dịch mạng.

Tóm lại, AsyncTaskLoader ngăn chặn sự trùng lặp của các luồng nền và loại bỏ sự trùng lặp của các hoạt động zombie.


11

AsyncTaskLoader thực hiện chức năng tương tự như AsyncTask , nhưng tốt hơn một chút. Nó có thể xử lý các thay đổi cấu hình Hoạt động dễ dàng hơn và nó hoạt động trong vòng đời của Mảnh vỡ và Hoạt động. Điều tuyệt vời là AsyncTaskLoader có thể được sử dụng trong mọi tình huống mà AsyncTask đang được sử dụng. Bất cứ lúc nào dữ liệu cần được tải vào bộ nhớ để Activity / Fragment xử lý, AsyncTaskLoader có thể thực hiện công việc tốt hơn.

Tuy nhiên, có một vài vấn đề khi sử dụng AsyncT task:

  • Thay đổi cấu hình có thể làm mọi thứ rối tung lên
  • Tạm dừng một hoạt động không tạm dừng AsyncTask
  • Một số lượng khá lớn mã soạn sẵn (có nghĩa là nhiều lỗi có thể xảy ra hơn)

Tài liệu AsyncTaskLoader


8

Một số khác biệt khác với mô tả trong các câu trả lời khác:

Khi sử dụng AsyncTaskLoader qua AsyncTask :

  • AsyncTaskLoader cho phép chúng tôi tải dữ liệu được lưu trong bộ nhớ cache cũ cho đến khi dữ liệu mới được trả vềforceLoad()

  • Chúng tôi có thể thiết lập sự chậm trễ để AsyncTaskLoader bởi setUpdateThrottle()đó có thể ngăn chặn cập nhật liên tục cho khách hàng (Hoạt động / Fragment)

  • AsyncTaskLoader có thể được chia sẻ thành nhiều phân đoạn nếu chúng có hoạt động cha mẹ chung và nếu nó được bắt đầu từgetActivity().getSupportLoaderManager()

  • AsyncTaskLoader bị hủy LoaderMangerkhi hoạt động được liên kết của nó không còn khả dụng. trong khi chúng ta cần hủy thủ công AsyncT task nếu hoạt động của người gọi bị hủy. Điều này tiết kiệm thời gian của chúng tôi từ việc viết tất cả các công cụ thanh toán bù trừ. AsyncTaskLoader chơi tốt với vòng đời tương ứng của họ.

Vì vậy, AsyncTaskLoader tốt hơn AsyncTask.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.