2011-08-19 25 views
116

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

Bạn có nên sử dụng AsyncTaskLoader thay vì AsyncTask không? Không LoaderManager cũng có trong ảnh không?

Nhưng tôi chưa 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.

Trả lời

47

Bạn có thể xem mã nguồn của thư viện tương thích để biết thêm thông tin. Thật là một FragmentActivity là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 của bạn (hoặc một sự thay đổi cấu hình xảy ra) bởi các trường hợp tiết kiệm sử dụng onRetainNonConfigurationInstance()
  • đá nạp ngay khi bạn gọi initLoader() trong hoạt động của bạn

bạn cần phải sử dụng LoaderManager để giao tiếp với các bộ tải, và cung cấp các callbacks cần thiết để tạo bộ nạp của bạn (s) và po đưa ra quan điểm của bạn với dữ liệu họ trả về.

Thông thường, việc này dễ dàng hơn việc tự quản lý số điện thoại của AsyncTask. Tuy nhiên, AsyncTaskLoader không được tài liệu chính xác, vì vậy bạn nên nghiên cứu ví dụ trong tài liệu và/hoặc lập mô hình mã của bạn sau CursorLoader.

+5

Tôi sẽ xem xét điều này. Có thể còn quá sớm để tìm các ví dụ hay về "AsyncTaskLoader', và khi nhiều nhà phát triển bắt đầu sử dụng nó, nhiều ví dụ sẽ đến. – OKA

8

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 các mảnh vỡ và hoạt động. Điều tốt đẹp là AsyncTaskLoader có thể được sử dụng trong mọi tình huống mà AsyncTask đang được sử dụng. Dữ liệu bất cứ lúc nào cần được tải vào bộ nhớ cho Hoạt động/Phân đoạn để xử lý, AsyncTaskLoader có thể thực hiện công việc tốt hơn.

Có một vài vấn đề với việc sử dụng AsyncTasks, mặc dù:

  • Thay đổi cấu hình có thể làm mọi chuyện rối lên
  • Tạm dừng một hoạt động không tạm dừng AsyncTask
  • Một số lượng hợp lý của mã boilerplate (mà có nghĩa là nhiều lỗi có thể)

AsyncTaskLoader doc

27

Khi so sánh AsyncTaskLoader so với AsyncTask, như bạn có thể biết khi 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 hình ảnh rõ ràng cho phép xoay thiết bị của bạn trong khi giao dịch mạng đang diễn ra:

AsyncTask sẽ được thực hiện lại làm chủ đề nền một lần nữa và quá trình xử lý chuỗi 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ý 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 sao chép chuỗi nền và loại bỏ trùng lặp hoạt động zombie.

+0

phải là câu trả lời đúng –

0

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

Khi sử dụng AsyncTaskLoader qua AsyncTask:

  • AsyncTaskLoader ban cho chúng ta sự tự do để tải dữ liệu được lưu trữ cũ cho đến khi dữ liệu mới được trả về bởi forceLoad()

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

  • AsyncTaskLoader thể được chia sẻ với nhiều mảnh vỡ nếu họ có hoạt động cha mẹ thường gặp và nếu nó được bắt đầu từ getActivity().getSupportLoaderManager()

  • AsyncTaskLoader bị hủy bởi LoaderManger khi 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 phải tự hủy AsyncTasks nếu hoạt động người gọi của nó bị phá hủy. Điều này tiết kiệm thời gian của chúng tôi từ 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 chúng.

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

Các vấn đề liên quan