11

Có lợi thế nào của Trình tải trên tác vụ Không đồng bộ không? Ngoài ra, làm thế nào để làm cho bộ tải tương thích cho điện thoại với Android froyo.Lợi thế của bộ tải trên Asynctask trong Android là gì?

Chỉnh sửa:

Vấn đề chính ở đây là tôi không sử dụng DB gốc (SqlLite). Sử dụng DB trên máy chủ phát triển. Rõ ràng, tôi không thể sử dụng CursorLoader nữa. AsyncTaskLoader không có ví dụ nào cả. Nếu có, vui lòng liên kết.

Có nên tải dữ liệu cần thiết lên DB cục bộ và sau đó truy vấn dữ liệu bằng cách sử dụng CursorLoader?

+0

Có thể bạn không triển khai DB gốc bên trong ứng dụng của mình. Nhưng liệu bạn đang truy vấn dữ liệu trên chính thiết bị (tức là nhạc, ảnh, danh bạ, lịch, v.v ...)? Nếu có, thì bạn vẫn có thể sử dụng CursorLoader. –

Trả lời

10

Có, Trình tải có lợi thế hơn AsyncTask khi chúng xử lý rất nhiều thứ mà AsyncTask thiếu ngắn, khốn khổ.

  1. Thay đổi định hướng màn hình gặp khó khăn trong AsyncTask. Tôi đã từng có một vấn đề như vậy, cho đến khi tôi sử dụng một lớp Activity Control, mà tôi đã sử dụng để giữ lại trong khi cấu hình thay đổi. Tôi có thể cung cấp cho bạn một số mã nếu bạn muốn biết làm thế nào. Tuy nhiên, ứng dụng thường gặp sự cố khi bạn thay đổi thời gian bội số định hướng ngay cả trước khi toàn bộ dữ liệu được tải. Bí mật ở đây không tải nhiều dữ liệu với chuỗi đầu tiên của bạn và hoàn thành công việc luồng của bạn càng sớm càng tốt. Ngay cả khi nó xảy ra ở chế độ nền, Android vẫn có cách xử lý các chủ đề tồi tàn. Bạn không bao giờ biết khi nào một trong các nhiệm vụ của bạn sẽ bị giết.

  2. Ngay cả khi bạn sử dụng AsyncTaskLoader, hãy đảm bảo rằng bạn sử dụng Trình quản lý hoạt động. Điều này sẽ giúp bạn kiểm soát nhiều hơn các hoạt động và AsyncTask.

Có, nó tương thích với mọi phiên bản Android cũ. Bạn cần phải bao gồm các thư viện hỗ trợ (Hầu hết các lần, điều này được bao gồm theo mặc định nhưng nó luôn luôn tốt đẹp để kiểm tra lại.)

+0

+1 AsyncTask có thể trở nên khó chịu. Xem [this] (http://blogactivity.wordpress.com/2011/09/01/proper-use-of-asynctask/) – slezica

1

Đối với một, trình tải dễ mã hơn (chúng hầu như được tích hợp trong Phân đoạn). Trình tải (cụ thể là Trình tải con trỏ) cũng xử lý con trỏ của bạn cho bạn (như quản lý truy vấn không được chấp nhận).

Kiểm tra điều này link để đọc về cách sử dụng Bộ nạp trước tổ ong.

1

Đơn giản hơn để triển khai và quản lý rất nhiều công đoạn quản lý vòng đời mà trước đó phải được thực hiện "bằng tay" với AsyncTasks. Xem câu trả lời cho số này question để biết thêm chi tiết.

Liên quan đến việc sử dụng chúng với Froyo, chúng có sẵn thông qua thư viện tương thích.

+0

Vấn đề ở đây là tôi không giao dịch với một DB gốc. Truy vấn nó từ máy chủ phát triển. Làm thế nào mà có thể sử dụng CursorLoader? – Hick

+0

Chỉ cần nhận thấy bạn đã cập nhật câu hỏi của mình, bạn đã xem ví dụ AsyncTaskLoader tại đây http://developer.android.com/reference/android/content/AsyncTaskLoader.html – Kingamajick

0

Một lợi thế khác với bộ nạp là chúng xử lý sự kiện xoay màn hình một cách duyên dáng trong khi asynctask có thể gây rắc rối cho bạn.

0

diff lớn nhất:

CursorLoader sẽ cập nhật nội dung UI của bạn càng sớm càng liên quan của nó ContentProvider thay đổi nội dung của nó (nói qua số Service), trong khi AsyncTask sẽ chỉ cập nhật giao diện người dùng của bạn khi bạn nói.

1

Dường như không ai nói về những bất lợi của người tải! Tôi hiện đang làm việc trên một hệ thống chạy các dịch vụ khác trong nền.

Điều tôi đã nhận thấy là ngay sau khi màn hình có trình tải được tiếp tục. Con trỏ được trình tải sử dụng sẽ khóa DB.

Nó có thể không mở cho hầu hết mọi người nhưng getDatabaseWriter từ sqlite thực sự là một phương thức đồng bộ và do đó con trỏ được trình tải sử dụng sẽ không bao giờ đóng cho đến khi trình nạp được đặt lại hoặc chấm dứt do đó khóa truy cập vào DB.

Tôi không thể khuyên bạn sử dụng bộ nạp trong những trường hợp này hoặc tôi có thể khuyên bạn sử dụng bộ nạp khi tập hợp kết quả của bạn bao gồm ít hơn 100 mục tĩnh và dường như không bao giờ thay đổi.

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