2013-01-16 13 views
7

Tôi mới dùng tên miền andriod và đang trong giai đoạn học tập. Tôi có một vài truy vấn:ContentResolver usage

Chúng tôi có đối tượng ContentResolver đơn cho mỗi ứng dụng không? Đây có phải là một đối tượng đơn lẻ không? Ai quản lý vòng đời đối tượng này? Nếu đó là singleton, nó xử lý nhiều yêu cầu truy vấn một ContentProvider như thế nào?

Trả lời

14

Từ Blog Alex Lockwood của - http://www.androiddesignpatterns.com/2012/06/content-resolvers-and-content-providers.html

các Resolver nội dung là gì?

Trình giải quyết nội dung là một cá thể chung duy nhất trong ứng dụng cung cấp quyền truy cập vào (và các ứng dụng khác) của bạn (và các ứng dụng khác) nhà cung cấp nội dung. Trình giải quyết nội dung hoạt động chính xác như tên của nó ngụ ý: nó chấp nhận yêu cầu từ khách hàng và giải quyết các yêu cầu này bằng cách chuyển hướng họ đến nhà cung cấp nội dung có thẩm quyền riêng biệt. Để thực hiện việc này, Trình giải quyết nội dung lưu trữ ánh xạ từ chính quyền đến Nhà cung cấp nội dung. Thiết kế này rất quan trọng vì nó cho phép một cách đơn giản và an toàn các phương tiện bảo mật truy cập vào các Nhà cung cấp nội dung của các ứng dụng khác một cách đơn giản và .

Trình phân giải nội dung bao gồm CRUD (tạo, đọc, cập nhật, xóa) phương pháp tương ứng với phương pháp trừu tượng (chèn, xóa, truy vấn, cập nhật) trong lớp Nhà cung cấp nội dung. Trình phân giải nội dung không biết việc triển khai Nhà cung cấp nội dung đang tương tác với (cũng không cần biết); mỗi phương thức được chuyển một URI mà chỉ định Nhà cung cấp nội dung tương tác.

Nhà cung cấp nội dung là gì?

Trong khi Resolver Content cung cấp một sự trừu tượng từ các nhà cung cấp nội dung các ứng dụng của, các nhà cung cấp nội dung cung cấp một sự trừu tượng từ nguồn dữ liệu cơ bản (tức là một cơ sở dữ liệu SQLite). Chúng cung cấp cơ chế xác định bảo mật dữ liệu (nghĩa là thực thi các quyền đọc/ghi ) và cung cấp giao diện chuẩn kết nối dữ liệu trong một quy trình với mã đang chạy trong một quy trình khác.

Nhà cung cấp nội dung cung cấp giao diện để xuất bản và tiêu thụ dữ liệu , dựa trên mô hình địa chỉ URI đơn giản bằng cách sử dụng lược đồ nội dung: // . Chúng cho phép bạn giải quyết các lớp ứng dụng của mình từ các lớp dữ liệu cơ bản , làm cho giả thuyết nguồn dữ liệu ứng dụng của bạn bằng cách trừu tượng nguồn dữ liệu cơ bản.

Cuộc đời một Query

Vì vậy, những gì chính xác là bước-by-step quá trình đằng sau một truy vấn đơn giản? Là được mô tả ở trên, khi bạn truy vấn dữ liệu từ cơ sở dữ liệu của mình qua nhà cung cấp nội dung , bạn không liên lạc trực tiếp với nhà cung cấp. Thay vào đó, bạn sử dụng đối tượng Trình phân giải nội dung để liên lạc với nhà cung cấp .Trình tự cụ thể của các sự kiện xảy ra khi một truy vấn là đã được đưa ra dưới đây:

  • Một cuộc gọi đến getContentResolver().query(Uri, String, String, String, String) được thực hiện. Cuộc gọi gọi phương thức truy vấn
    của Trình giải quyết nội dung, không phải là ContentProvider's.

  • Khi phương thức query được gọi, Trình phân giải nội dung phân tích đối số uri và trích xuất quyền hạn của nó.

  • Trình phân giải nội dung hướng yêu cầu đến nhà cung cấp nội dung đã đăng ký với cơ quan (duy nhất). Điều này được thực hiện bằng cách gọi phương thức query của Nhà cung cấp nội dung
    .

  • Khi phương thức Content Provider's query được gọi, truy vấn được thực hiện và Con trỏ được trả về (hoặc một ngoại lệ được ném).
    hành vi kết quả phụ thuộc hoàn toàn vào triển khai
    của Nhà cung cấp nội dung.