2013-03-10 51 views
5

Tôi mới phát triển Android (để phát triển tổng thể thành thẳng thắn), và như vậy tôi đã đọc hướng dẫn của Commonsware Busy Coder. Trong khi đọc qua phần SQLite, có một vài điều không phải là 100% rõ ràng đối với tôi. Dưới đây là những gì tôi tin là đang diễn ra cũng như một số câu hỏi. Hãy sửa tôi nếu tôi sai trong quá trình suy nghĩ của tôi.Quyết định giữa bối cảnh hoạt động hoặc bối cảnh ứng dụng để khởi tạo SQLiteOpenHelper

Tác giả đề xuất rằng nếu bạn định sử dụng cơ sở dữ liệu từ nhiều hơn một hoạt động trong ứng dụng của mình, bạn không nên sử dụng tham chiếu Ngữ cảnh từ mỗi Hoạt động để tạo nhanh SQLiteOpenHelper. Thay vào đó, bạn nên sử dụng getApplicationContext() do Activity cung cấp.

Bằng cách làm như vậy, anh ấy sử dụng thực tế là getApplicationContext() truy xuất thể hiện đơn lẻ của Ngữ cảnh được tạo ngay sau khi quá trình đăng ký bắt đầu. Đây là câu hỏi của tôi. Tôi nghĩ rằng nếu tôi sử dụng Ngữ cảnh được cung cấp bởi Hoạt động (từ khóa này) khi khởi tạo SQLiteOpenHelper, mỗi Hoạt động sẽ tạo ví dụ riêng của mình là SQLiteOpenHelper. Nó xuất hiện với tôi rằng chỉ cần sử dụng bối cảnh của hoạt động không thông báo cho bối cảnh ứng dụng rằng đã có một thể hiện của SQLiteHelper tạo ra, và do đó, nó tạo ra một cái mới thay vì tái sử dụng hiện có. Suy nghĩ của tôi có đúng không?

Tôi nghĩ về bối cảnh (và sửa lỗi nếu tôi sai) làm "cổng" của nhà phát triển để lấy thông tin và tài nguyên được cung cấp bởi hệ điều hành Android (tức là giữ dịch vụ hệ thống qua getSystemService()). Nhưng làm như vậy bằng cách sử dụng này (từ một hoạt động) hoặc sử dụng getApplicationContext() có ý nghĩa khác nhau. Sử dụng điều này, sẽ nhận được một thể hiện của bối cảnh đó là "địa phương" để hoạt động hiện tại của bạn, nhưng sử dụng getApplicationContext() tham khảo toàn bộ ứng dụng. Nếu điều này đúng, có nghĩa là khi tôi chuyển một tham chiếu đến getApplicationContext() đến Phương thức khởi tạo của SQLiteOpenHelper, nó sẽ cho phép toàn bộ ứng dụng của tôi biết rằng có một cá thể của SQLiteOpenHelper của chúng tôi đã được tạo. Làm thế nào để SQLiteOpenHelper cho Ứng dụng biết về điều này? nó có sử dụng một số phương thức tĩnh như public/private static dbCreated (Context context) {// để cho context biết có một instance của hoạt động này} để cho ứng dụng biết không?

Tôi xin lỗi nếu điều này gây nhầm lẫn.

Cảm ơn trước thời hạn

+0

Câu hỏi là gì? – Neolisk

+0

Xin lỗi nếu nó khó hiểu. Các câu hỏi nằm ở cuối đoạn thứ ba và thứ tư. – Emmanuel

+0

Chắc chắn là vậy. Tôi đang tìm một câu hỏi, có thể được trả lời trong phạm vi SO. Của bạn quá rộng cho đến nay. – Neolisk

Trả lời

5

Tôi nghĩ bây giờ tôi hiểu rõ hơn về khái niệm Bối cảnh. Tôi muốn chia sẻ một liên kết tôi thấy rằng làm rõ chủ đề này. http://t.co/9R0bPWiKc5

2

Câu hỏi thứ hai của bạn, nếu tôi hiểu đúng, Ngữ cảnh là một loại Registry of Singletons. Vì vậy, SQLiteOpenHelper chỉ được tạo và gắn với ngữ cảnh được gán cho nó. Tất cả mọi thứ sử dụng ngữ cảnh này để có được SQLiteOpenHelper sẽ nhận được trường hợp bị ràng buộc đó.

+0

Cảm ơn thông tin. +1. – Emmanuel

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