17

Ok, tài liệu nêu rõ rằng nó cho phép Hoạt động quản lý vòng đời của con trỏ. Nhưng tôi không thực sự thấy điểm của nó kể từ khi hoạt động bị phá hủy, bất kỳ tham chiếu đến con trỏ mới được tạo ra cũng sẽ bị xóa và sau đó con trỏ chính nó còn lại để chết trong chu kỳ thu gom rác tiếp theo. Vậy tại sao lại bận tâm?Mục đích của startManagingCursor là gì?

+1

Bài đăng này giải thích lý do tại sao nó không được chấp nhận tốt :) http://www.androiddesignpatterns.com/2012/07/loaders-and-loadermanager-background.html – user1422551

Trả lời

33

Bạn không nên dựa vào con trỏ đang bị bộ thu thập rác phá hủy ... con trỏ thể hiện số lượng tài nguyên đáng kể: tất cả dữ liệu do con trỏ giữ, cộng với kết nối với nhà cung cấp nội dung sở hữu con trỏ có nghĩa là yêu cầu quá trình của nó được lưu giữ trong bộ nhớ.

Trong các phiên bản mới hơn của Android, các bản ghi nhật ký được in nếu trình hoàn thành của con trỏ chạy mà không bị đóng một cách rõ ràng, vì điều quan trọng là các ứng dụng phải đóng con trỏ khi thực hiện với chúng.

Con trỏ được quản lý chú ý đến việc đóng con trỏ khi hoạt động bị hủy, nhưng chúng cũng hoạt động nhiều hơn: chúng sẽ bị vô hiệu hóa và được truy vấn lại khi các hoạt động bị dừng và khởi động lại.

Điều đó nói rằng, tại thời điểm này, bạn nên xem xét các con trỏ được quản lý không được dùng nữa. API trình tải mới tốt hơn rất nhiều và có nhiều cải tiến đối với trải nghiệm người dùng của ứng dụng - nó đảm bảo rằng tất cả các thao tác con trỏ được thực hiện ngoài chuỗi chính (vì vậy không có trục trặc trong tương tác và hoạt ảnh trên giao diện người dùng của bạn) và có thể tuyên truyền dữ liệu con trỏ hiện có trên các trường hợp hoạt động khi một hoạt động được khởi động lại do thay đổi cấu hình thay vì phải tải lại dữ liệu.

Nếu bạn cần chạy trên các phiên bản Android cũ hơn 3.0, bạn có thể sử dụng triển khai Trình tải của thư viện hỗ trợ v4 cho các ứng dụng đó.

+1

Ok, đó là giải thích hợp lý. Nhưng bạn có thể vui lòng giải thích thêm một chút về ý nghĩa của bạn khi bạn nói rằng tôi có thể sử dụng "triển khai thực hiện bộ tải của thư viện hỗ trợ v4" không? Tôi đã kiểm tra rằng lớp CursorLoader chỉ có sẵn ở cấp API 11. Và tôi chỉ nghĩ rằng vì tôi muốn nhắm mục tiêu các cấp thấp hơn, nên không có cách nào để sử dụng lớp đó .. Bạn có nói là tôi có thể không? – Bilthon

+2

@Bilthon: Thư viện tương thích Android có hỗ trợ 'Loader' và' Fragment' quay lại API Level 4. – CommonsWare

+3

Điều này có nghĩa là nếu nhà phát triển xử lý việc đóng Cursors trong onPause() và requeries/initialisation của Cursors trong onResume (), mà startManagingCursor() là không cần thiết, và rằng cách tiếp cận được đề cập có thể được sử dụng trong 3,0 + là tốt? – ataulm

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