Sự khác biệt chính xác giữa “Nhà cung cấp nội dung” và “Cơ sở dữ liệu SQLite”


87

tôi đã lập trình cơ sở dữ liệu SQLite cho Android, nhưng tôi không biết gì về Nhà cung cấp nội dung ngoại trừ điều này: "Như tôi đã giới thiệu trang Nhà phát triển Android, Android SDK đã giải thích về" Nhà cung cấp nội dung "vì nó được sử dụng để lưu trữ và truy xuất dữ liệu."

Nhưng sau đó,

  1. Sự khác biệt chính xác giữa "Nhà cung cấp nội dung" và "Cơ sở dữ liệu SQLite" là gì?
  2. Tốt nhất để lưu trữ dữ liệu, khi nào?

Bất kỳ ví dụ hoặc giúp đỡ !!

Câu trả lời:


134

Tôi đã tìm thấy một sự khác biệt lớn, như sau:

Lưu trữ dữ liệu của bạn trong cơ sở dữ liệu là một cách tốt để duy trì dữ liệu của bạn , nhưng có một lưu ý trong Android-cơ sở dữ liệu được tạo trong Android visiblechỉ dành cho ứng dụng đã tạo ra chúng. Có nghĩa là, cơ sở dữ liệu SQLite được tạo trên Android bởi một ứng dụng chỉ có thể sử dụng bởi ứng dụng đó, không phải bởi các ứng dụng khác.

Vì vậy, nếu bạn need to share data between applications, you need to use the content provider model as recommended in Android.Bài viết này trình bày những điều cơ bản về các nhà cung cấp nội dung và cách bạn có thể triển khai chúng.

Tôi tìm thấy bài viết này tại liên kết này

Thông tin thực sự tốt đẹp được cung cấp.


2
Có vẻ như hiện tại link đã chết ... không thấy bài viết nữa. Rất muốn xem bài viết bạn đang tham khảo nếu tìm lại được.
prolink007

vào ngày 11 tháng 2 năm 2012, liên kết http://www.devx.com/wireless/Article/41133 hoạt động,
k3b

Điều gì sẽ xảy ra nếu chúng tôi cung cấp các cơ chế trong quy trình để chia sẻ dữ liệu trên nhiều ứng dụng theo cách an toàn theo chuỗi?
Manohar

2
Một ưu điểm thêm là các nhà cung cấp nội dung sử dụng một chủ đề duy nhất cho mỗi hoạt động, như vậy thì nhiều chủ đề không thể sửa đổi cơ sở dữ liệu như thế nào trong trường hợp sqlite
Rat-một-tat-một-tat Ratatouille

54

Sự khác biệt chính xác giữa "Nhà cung cấp nội dung" và "Cơ sở dữ liệu SQLite" là gì?

ContentProviderlà một mặt tiền - một API bạn có thể triển khai để hiển thị cơ sở dữ liệu cho các quy trình khác. Nó có thể được triển khai theo cách mà dữ liệu được lưu trữ trong cơ sở dữ liệu SQLite, nhưng không nhất thiết phải như vậy.

Tốt nhất để lưu trữ dữ liệu, khi nào?

Điều đó là không thể trả lời trong phần tóm tắt. Nói chung, trừ khi có thứ gì đó yêu cầu bạn sử dụng ContentProvider, chỉ cần sử dụng cơ sở dữ liệu.


26
Tôi thích sử dụng ContentProvider hơn vì nó là một bản tóm tắt rất hay so với SQL. Bạn cũng có thể chơi đẹp với CursorAdapter và các truy vấn tự động.
alexanderblom

26

Tôi đã tạo ra nhiều ứng dụng tốt với hàng nghìn người dùng sử dụng chúng mà chỉ đơn giản là sử dụng các phương pháp SQLite. Nhưng đó là một thời gian trước đây và tôi phải viết rất nhiều mã theo cách thủ công mà bây giờ ContentProvider có thể dễ dàng xử lý. Hồi đó, tôi không thích sử dụng Trình cung cấp nội dung vì nó dường như chỉ làm tăng thêm sự phức tạp trong mã.

Tuy nhiên, trong vài năm qua, khi Android đã phát triển, tôi đã chuyển sang ContentProvider vì nó tiết kiệm thời gian và cho phép bạn làm được nhiều việc hơn. Bây giờ tôi sử dụng nó rộng rãi. Khi bạn đã viết được lớp Nhà cung cấp nội dung, cuộc sống của bạn trở nên dễ dàng hơn nhiều. Với ContentProvider, tôi có thể dễ dàng đối phó với Cursor Loaders, Loader Callbacks và Bulk Inserts mà trước đây tôi phải viết mọi thứ theo cách thủ công và nó vẫn không hoạt động hiệu quả. Đặc biệt là khi cập nhật chế độ xem danh sách, giờ đây được cập nhật tự động chỉ nhờ một phương thứctifychange (). Điều này có nghĩa là bây giờ tôi không phải nhập trình nghe của riêng mình và cập nhật nội dung theo cách thủ công trong chế độ xem danh sách và bộ điều hợp. Thêm vào đó, tôi không cần phải lo lắng về việc mở và đóng cơ sở dữ liệu hoặc lo lắng về việc rò rỉ bộ nhớ. Đó là tất cả do Nhà cung cấp nội dung xử lý. Vấn đề duy nhất thỉnh thoảng tôi gặp phải là bạn không thể thực hiện một số truy vấn phức tạp trong ContentProviders. Trong trường hợp này, bạn vẫn có thể sử dụng các truy vấn thô và sử dụng tương tác thủ công kiểu cũ với sqlite.

Nếu trước đây bạn đã viết DbAdapter, Người trợ giúp và Người quan sát của riêng mình, bạn có thể an toàn chuyển chúng sang các ứng dụng mới của mình mà không cần tốn thời gian để chuyển đổi mọi thứ sang ContentProvider. Nhưng dựa trên kinh nghiệm của mình, tôi thực sự khuyên bạn nên chuyển sang ContentProvider. Sẽ mất một thời gian để làm quen với nó, nhưng khi bạn đã có kinh nghiệm với nó, bạn sẽ ở lại với nó.

CẬP NHẬT 2017 Hiện tôi đã chuyển sang Realm , một cách tốt hơn nhiều để sử dụng cơ sở dữ liệu trên mọi nền tảng. Hãy dành một vài giờ để học nó và tiết kiệm vô số giờ trong sự nghiệp phát triển ứng dụng của bạn.


Tôi đã nghĩ đến việc chuyển đổi mã của mình thành nhà cung cấp nội dung nhưng bây giờ tôi nghĩ đến việc giữ nó.
Mohammed Subhi Sheikh Quroush

Bây giờ bạn cũng có thể Thêm thư viện 'Phòng' của Android
Ravindra Kushwaha

8

1. Nhà cung cấp nội dung không an toàn theo chuỗi

Theo mặc định, các nhà cung cấp nội dung không an toàn cho chuỗi. Nếu bạn có nhiều chuỗi sử dụng một nhà cung cấp nội dung, bạn có thể thấy nhiều ngoại lệ khác nhau được đưa ra và các mâu thuẫn dữ liệu khác. Cách dễ nhất để khắc phục điều này là sử dụng từ khóa được đồng bộ hóa trên mỗi phương thức công khai mà nhà cung cấp nội dung hiển thị.

Theo cách này, mỗi lần chỉ có một luồng có thể truy cập các phương thức này.

2. Chơi đẹp khi viết nhiều

Tôi có nhu cầu trong ứng dụng Bản đồ phục vụ mới để nhập dữ liệu từ các tệp nhị phân vào cơ sở dữ liệu được ứng dụng sử dụng nội bộ. Để làm điều này và chơi tốt với phần còn lại của ứng dụng, tốt nhất là:

Tạo ra một luồng mới để thực hiện việc nhập để các luồng khác không bị ảnh hưởng xấu, đặc biệt là luồng phụ trách cập nhật giao diện người dùng; và Tạm dừng một thời gian ngắn ở cuối mỗi lần nhập để tạo cơ hội cho các luồng khác cần sử dụng các phương pháp đồng bộ hóa.

3. Các nhà cung cấp nội dung đôi khi buộc bạn phải suy nghĩ theo chiều hướng ngang ngược

Cách mà các nhà cung cấp nội dung trong Android hoạt động là cung cấp một lớp trừu tượng giữa phần còn lại của mã của bạn và cơ sở dữ liệu bên dưới. Điều này chủ yếu là do, theo như tôi có thể nói, các nhà cung cấp nội dung có thể truy cập dữ liệu từ những nơi khác ngoài cơ sở dữ liệu.

Điều này có nghĩa là bạn không thể thực thi các truy vấn SQL thô trên cơ sở dữ liệu bên dưới và bạn cần chỉ định các thành phần khác nhau của truy vấn SQL bằng cách sử dụng các biến được truyền cho các phương thức khác nhau, chẳng hạn như phương thức truy vấn. Nếu bạn có một nhiệm vụ không phù hợp với cách SQL được xử lý bởi nhà cung cấp nội dung, bạn có hai tùy chọn:

Suy nghĩ kỹ về truy vấn, có thể bạn có thể nhận được dữ liệu mình cần bằng các truy vấn thay thế và truy cập kết quả từ con trỏ; và Sử dụng URI để truy cập dữ liệu bình thường và một URI đặc biệt phù hợp với một truy vấn cụ thể cho những tác vụ không có lựa chọn thay thế.


Theo ContentProvider, sáu phương thức trừu tượng của ContentProvider phải được triển khai có thể được gọi bởi nhiều luồng cùng một lúc, vì vậy chúng phải được triển khai dưới dạng an toàn cho luồng. Lớp trừu tượng ContentProvider không phải là lý do ngoại lệ của một số mã cụ thể mà là việc triển khai. Thực hiện theo Quy trình và Chủ đề để triển khai các phương pháp an toàn theo luồng của ContentProvider.
StahlRat

5

Nhà cung cấp nội dung được sử dụng khi bạn muốn chia sẻ dữ liệu của mình trên các ứng dụng.

Nếu bạn có cơ sở dữ liệu được đính kèm với một ứng dụng và bạn muốn ứng dụng khác sử dụng một số dữ liệu, bạn có thể triển khai trình cung cấp nội dung hiển thị dữ liệu


3

Sự khác biệt chính là: khi ứng dụng của bạn cần chia sẻ thông tin với ứng dụng khác, hãy sử dụng Nhà cung cấp nội dung. SQLite chỉ lưu trữ dữ liệu cho ứng dụng tạo ra nó


3

Tôi đọc câu trả lời này trong khi tìm kiếm cùng một nghi ngờ, vì vậy tôi đã nghĩ đến việc chia sẻ nó. nó nói -

Bạn nên cung cấp thêm mức độ trừu tượng cho dữ liệu của mình để giúp thay đổi nội bộ dễ dàng hơn. Điều gì sẽ xảy ra nếu bạn quyết định thay đổi cấu trúc cơ sở dữ liệu cơ bản sau đó? Nếu bạn sử dụng ContentProvider, bạn có thể chứa tất cả các thay đổi về cấu trúc bên trong nó, nếu như không sử dụng, bạn buộc phải thay đổi tất cả các vùng của mã bị ảnh hưởng bởi các thay đổi cấu trúc. Bên cạnh đó, thật tuyệt khi có thể sử dụng lại cùng một API tiêu chuẩn để truy cập dữ liệu thay vì phân tán mã của bạn với quyền truy cập cấp thấp vào cơ sở dữ liệu.

Vì vậy, sử dụng một nhà cung cấp nội dung sẽ là một ý tưởng hay.


3

Hãy nghĩ đến Hệ thống quản lý nội dung tiên tiến. Mỗi đối tượng (trang, hình ảnh, tin bài, mục sự kiện, v.v.) có nội dung, địa chỉ, quyền của người dùng và cách tương tác với đối tượng đó từ các phần khác nhau của hệ thống. Nhà cung cấp nội dung làm điều đó cho Android. Giờ đây, bạn có thể chia sẻ các tệp hoặc hình ảnh mà bạn có thể đã lưu trữ trong ứng dụng của mình. Bạn cũng có thể tạo các đối tượng có thể chia sẻ tùy chỉnh, như danh bạ công việc, ghi chú có thể chỉnh sửa, v.v. Và chỉ định bảo mật và ứng dụng mặc định để xử lý đối tượng đó khi bạn mở chúng từ bất kỳ ứng dụng nào khác.


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.