18

Tại sao tôi nên sử dụng AsyncTaskLoader, và khi nào tôi nên thích CursorLoader và ngược lại?Sự khác nhau giữa CursorLoader và AsyncTaskLoader

Trong chính thức page, ví dụ về danh sách ứng dụng được hiển thị, điều này sử dụng AsyncTaskLoader thay vì CursorLoader.

Ưu điểm và nhược điểm của hai yếu tố này là gì? Tôi đọc ở đâu đó về CursorLoader không quan tâm đến sự thay đổi nội dung (trong sqlite).

Cảm ơn bạn!

Trả lời

23

AsyncTaskLoader là Trình tải trang trừu tượng cung cấp AsyncTask để thực hiện công việc. Do đó, bạn thường mở rộng AsyncTaskLoader để tạo trình tải tùy chỉnh của riêng bạn. Sự khác biệt chính giữa việc sử dụng AsyncTask và sử dụng AsyncTaskloader là thay đổi cấu hình (chẳng hạn như thay đổi định hướng) không ảnh hưởng đến AsyncTaskLoader và các quy trình của nó vì AsyncTaskLoader có vòng đời riêng của nó, trong khi các thay đổi cấu hình ảnh hưởng xấu đến AsyncTask vì nó được kết nối với vòng đời của hoạt động chủ.

CursorLoader là trình tải truy vấn ContentResolver và trả về một con trỏ. Lớp này triển khai giao thức Trình tải theo cách tiêu chuẩn để truy vấn con trỏ. Nó không là gì ngoài AsyncTaskLoader.

Tóm lại, bạn có thể sử dụng AsyncTaskLoader khi bạn phải tạo trình tải tùy chỉnh bằng cách mở rộng AsyncTaskLoader < D> trong đó D = "anything_you_want_to_load". Và bạn sử dụng CursorLoader khi bạn phải thực hiện một bộ nạp tải Cursor (thường được sử dụng khi bạn có tải dữ liệu từ cơ sở dữ liệu).

1

AsyncTaskLoader là một lớp con đặc biệt của Trình tải là sở thích. Lớp này thực hiện chức năng tương tự như AsyncTask, nhưng tốt hơn một chút. 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 (có nghĩa là nhiều lỗi có thể)

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.

Vẻ đẹp của Trình tải là nó xử lý một số 'gotchas' thường bị bỏ qua khi sử dụng AsyncTask. Chủ yếu, nó xử lý các thay đổi cấu hình hoạt động (IE khi người dùng xoay màn hình).

Mặt khác, CursorLoader thực sự tỏa sáng khi sử dụng các con trỏ trong Android để lấy dữ liệu. Lớp Loader thực hiện một công việc tuyệt vời để cập nhật thông tin Cursor (và lần lượt là UI) bất cứ khi nào dữ liệu cơ bản thay đổi. Điều này vô cùng hữu ích khi thông tin thay đổi thường xuyên và bạn không muốn làm gián đoạn giao diện người dùng và bất kỳ điều gì người dùng hiện đang làm, chỉ để hiển thị một số thông tin mới.

+0

Đang chờ ai đó xác nhận – Nabin

0

Chênh lệch CursorLoaderAsyncTaskLoader

  • AsyncTaskLoader có thể được sử dụng để trở về đối tượng tùy chỉnh nhưng CursorLoader lợi nhuận chỉ con trỏ
  • CursorLoader có thể nhận getContext().getContentResolver().notifyChange(uri, null); nhưng AsyncTaskLoader không nhận được.
4

Điều đáng chú ý là CursorLoader là triển khai cụ thể AsyncTaskLoader<D>. Về cơ bản, CursorLoader có thể được coi là một AsyncTaskLoader được thiết kế riêng để xử lý các đối tượng Cursor.

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