Tại sao ContentProvider của Android được tạo?


11

Tiêu đề tóm tắt câu hỏi của tôi, nhưng để giải thích cơ bản điều tôi muốn hiểu là tại sao các nhà thiết kế Android muốn các ứng dụng cần làm việc với dữ liệu được chia sẻ để sử dụng Nhà cung cấp nội dung thay vì chỉ truy cập trực tiếp vào cơ sở dữ liệu SQLite?

Lý do duy nhất tôi có thể nghĩ đến là bảo mật vì các tệp nhất định chỉ có thể được truy cập là một số quy trình nhất định và theo cách đó, Nhà cung cấp nội dung là người gác cổng đảm bảo mỗi ứng dụng có các đặc quyền phù hợp trước khi cho phép đọc và / hoặc ghi vào tệp cơ sở dữ liệu. Đó có phải là lý do chính tại sao ContentProvider được tạo ra?

Câu trả lời:


6

Trên hết là cách bảo vệ dữ liệu của người tiêu dùng và nhà cung cấp dữ liệu. Bạn phát triển nhà cung cấp nội dung của riêng mình hoặc mở rộng một nhà cung cấp hiện có nếu bạn muốn công khai một số dữ liệu của mình hoặc ít nhất là có sẵn cho ứng dụng khác.

Đúng điều này có thể máy chủ để kiểm soát truy cập từ quan điểm bảo mật nhưng nó cũng cho phép bạn làm lại việc thực hiện vật lý của dữ liệu của bạn bất cứ khi nào bạn muốn. Tất cả những gì bạn cần làm là điều chỉnh back-end của nhà cung cấp nội dung của bạn trong trường hợp đó. Các ứng dụng tiêu dùng dữ liệu sẽ không phải viết lại. Họ sẽ tiếp tục truy cập dữ liệu của bạn thông qua trình giải quyết nội dung của họ mà không biết về bất kỳ thay đổi nào trong việc triển khai cơ bản thực tế.

Ngoài ra, Android sẽ chỉ khởi tạo một phiên bản của nhà cung cấp nội dung của bạn ngay cả khi dữ liệu được một số khách hàng truy cập, do đó, họ sẽ chăm sóc các truy cập đồng thời mà không cần bạn phải quan tâm đến nó.

Cuối cùng, tôi tin rằng nó cũng sẽ xử lý sự quyết liệt của khởi động sạch và tắt.


1
Tôi nghĩ rằng cách nhiệt có lẽ là câu trả lời tốt nhất. Tôi không đồng ý với quan điểm của bạn về truy cập đồng thời, SQLite và giao diện Java của Android xử lý đồng thời, chính ContentProvider cho phép nhiều luồng đồng thời truy vấn / chèn / cập nhật để nó không thực sự làm gì cho bạn.
satur9nine

3

Việc này ContentProvidercũng tóm tắt tất cả các giao tiếp giữa các quá trình được yêu cầu để giao tiếp với các ứng dụng của bên thứ ba khác. Phải tự viết mã này sẽ là một nỗi đau rất lớn .


Các bên thứ 3 luôn có thể chỉ cần truy cập trực tiếp vào tệp cơ sở dữ liệu, không cần liên lạc giữa các quá trình.
satur9nine

Tôi không chắc ý của bạn là gì ... nếu một ứng dụng là "bên thứ ba" thì theo định nghĩa, nó phải tồn tại trong một quy trình khác (vì mọi ứng dụng Android đều có quy trình chính của riêng nó). Ngoài ra, nếu HĐH Android cho phép bạn truy cập trực tiếp vào kho dữ liệu thô của ứng dụng khác, điều đó sẽ gây ra một số vấn đề bảo mật khá lớn.
Alex Lockwood

1

ContentProvider cũng là một bản tóm tắt ẩn các chi tiết về cách dữ liệu được lưu trữ / tạo. Ví dụ: trong một trong các ứng dụng của mình, tôi có một nhà cung cấp nội dung trả về hình ảnh PNG. Những hình ảnh này không được lưu trữ ở bất cứ đâu, chúng được tạo ra theo yêu cầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.