2010-07-28 30 views
76

tôi đã thực hiện 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 đã gọi Android Developer page, 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".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"

Nhưng sau đó,

  1. sự khác biệt chính xác giữa "Content-Provider" và "Cơ sở dữ liệu SQLite" là gì?
  2. Cách nào tốt nhất để lưu trữ dữ liệu khi nào?

Bất kỳ ví dụ hoặc trợ giúp nào !!

Trả lời

122

tôi 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 cảnh báo trong cơ sở dữ liệu Android được tạo trong Android là visible chỉ với ứng dụng đã tạo chúng. Đó là để nói, một cơ sở dữ liệu SQLite được tạo ra trên Android bởi một ứng dụng có thể sử dụng chỉ bởi ứng dụng đó, chứ 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 khái niệm cơ bản về nhà cung cấp nội dung và cách bạn có thể triển khai.

Tôi tìm thấy bài viết này tại số link

Thông tin thực sự thú vị được cung cấp.

+2

Dường như liên kết đã chết ... không thấy bài viết nữa. Muốn xem bài viết bạn đang tham khảo nếu bạn tìm thấy nó một lần nữa. – prolink007

+0

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

+0

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

50

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

ContentProvider là mặt tiền - API bạn có thể triển khai để lộ cơ sở dữ liệu cho các quy trình khác. Nó có thể được triển khai theo cách 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.

Cách nào tốt nhất để lưu trữ dữ liệu khi nào?

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

+25

Tôi thích sử dụng Trình cung cấp nội dung vì nó trừu tượng hóa rất tốt trên SQL. Bạn cũng có thể chơi tốt với CursorAdapter và các yêu cầu tự động. – alexanderblom

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 giữa các ứng dụng.

Nếu bạn có một cơ sở dữ liệu kèm theo một ứng dụng và bạn muốn một ứng dụng khác để sử dụng một số dữ liệu, bạn có thể thực hiện một nhà cung cấp nội dung cho thấy nhiều 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 một ứng dụng khác, hãy sử dụng Nhà cung cấp nội dung. Dữ liệu lưu trữ duy nhất của SQLite cho ứng dụng tạo ra nó

21

Tôi đã tạo ra nhiều ứng dụng tốt với hàng ngàn người dùng đang sử dụng chúng mà chỉ đơn giản là sử dụng các phương thức SQLite. Nhưng đó là một thời gian trước và tôi đã phải tự viết rất nhiều mã mà bây giờ có thể dễ dàng được đưa về chăm sóc bởi ContentProvider.Lúc đó, tôi không ủng hộ việc sử dụng Nhà cung cấp nội dung vì dường như nó chỉ thêm độ 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 nhiều hơn. Bây giờ tôi sử dụng nó rộng rãi. Khi bạn có một lớp Nhà cung cấp nội dung được viết, 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 các Trình tải Cursor, Trình gọi lại của Trình tải và Hàng loạt Chèn mà tôi phải viết mọi thứ theo cách thủ công trong quá khứ và vẫn không hoạt động hiệu quả. Đặc biệt là khi cập nhật chế độ xem danh sách, hiện được cập nhật tự động nhờ chỉ một phương thức notifychange(). Điều này có nghĩa là bây giờ tôi không phải nhập người nghe của riêng mình và cập nhật thủ công nội dung trong chế độ xem danh sách và bộ điều hợp. Ngoài ra, tôi không cần phải lo lắng về việc mở và đóng các cơ sở dữ liệu hoặc lo lắng về rò rỉ bộ nhớ. Tất cả đều được Nhà cung cấp nội dung xử lý. Vấn đề duy nhất mà một lần trong một thời gian tôi phải đối mặt là rằng bạn không thể làm 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 truy vấn thô và sử dụng tương tác thủ công cũ kỹ với sqlite.

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

CẬP NHẬT 2017 bây giờ tôi đã chuyển sang Realm, một cách tốt hơn để sử dụng cơ sở dữ liệu trên nền tảng nào. 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.

+0

Tôi đang suy nghĩ để chuyển mã của mình sang nhà cung cấp nội dung. –

+0

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

8

1. Nhà cung cấp nội dung không chủ Safe

Bằng cách cung cấp nội dung mặc định không phải là thread an toàn. Nếu bạn có nhiều chủ đề bằng cách 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 bị ném và các dữ liệu không nhất quán 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 từng phương thức công khai được nhà cung cấp nội dung tiếp xúc.

Bằng cách này, chỉ một chuỗi tại một thời điểm có thể truy cập các phương pháp này.

2. Chơi thoải mái khi thực hiện rất nhiều viết

tôi có nhu cầu trong việc áp dụng Serval Maps mới để nhập dữ liệu từ các tập tin nhị phân vào cơ sở dữ liệu sử dụng trong nội bộ của ứng dụng. Để thực hiện đ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 chuỗi mới để thực hiện việc nhập để các chủ đề khác không bị ảnh hưởng bất lợi, đặc biệt là chủ đề cập nhật giao diện người dùng; và Tạm dừng một thời gian ngắn vào cuối mỗi lần nhập để đưa ra các chủ đề khác cần sử dụng các phương thức được đồng bộ hóa nhiều cơ hội hơn.

3.Các nhà cung cấp nội dung buộc bạn phải nghĩ đôi khi đôi khi

Cách 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ã và cơ sở dữ liệu bên dưới. Điều này chủ yếu là do thực tế, 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 cơ bản và bạn cần phải xác đị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ĩ về truy vấn, có thể bạn có thể nhận dữ liệu bạn cần bằng truy vấn và truy cập thay thế kết quả từ con trỏ; và Sử dụng URI để truy cập dữ liệu bình thường và URI đặc biệt được đối sánh với truy vấn cụ thể cho những tác vụ không có lựa chọn thay thế.

2

Tôi đọc this answer trong khi tìm kiếm sự nghi ngờ tương tự, vì vậy hãy nghĩ đến việc chia sẻ nó. trạng thái -

Thực tiễn tốt là cung cấp mức trừu tượng cao hơn cho dữ liệu của bạn để dễ thay đổi nội bộ 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ày? Nếu bạn sử dụng ContentProvider, bạn có thể chứa tất cả các thay đổi cấu trúc bên trong nó, như thể bạn 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ể tái sử dụng cùng một API chuẩn để truy cập dữ liệu thay vì xả rác 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, việc sử dụng nhà cung cấp nội dung sẽ là một ý tưởng hay.

3

Hãy suy nghĩ về Hệ thống quản lý nội dung nâng cao. 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 người dùng và các cách tương tác với nó 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ạ doanh nghiệp, 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.

+0

Đó là một điểm tốt! –

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