Tổng quan: Mở các kết nối db trong onStart và trong các tác vụ không đồng bộ đã trở nên khá phức tạp. Thực tiễn không tốt để có kết nối db có sẵn trên toàn cầu? Nếu nó là xấu một cách tốt hơn là gì?Android khi nào tôi nên mở và đóng kết nối db?
Chi tiết: Tôi có một ứng dụng kết nối với cơ sở dữ liệu sqlite3 trong một số hoạt động. Lúc đầu không có nhiều nơi tôi cần truy cập cơ sở dữ liệu nên tôi chỉ mới mở và đóng mỗi khi tôi cần truy cập. Sau đó, có nhiều nơi cần truy cập nó hơn, như được đề xuất trên một câu hỏi Stack Overflow khác, tôi bắt đầu mở các kết nối cơ sở dữ liệu trong phương thức onStart của hoạt động cần kết nối và đóng nó trong phương thức onStop.
Điều này làm việc tốt cho đến khi tôi bắt đầu cần kết nối trong một số tác vụ không đồng bộ đã làm sống động hoạt động. Vì phương thức onStop cho hoạt động đã được gọi và các kết nối đã bị đóng, do thời gian tác vụ không đồng bộ cố gắng truy cập cơ sở dữ liệu mà nó đã thất bại. Là một giải pháp, tôi đã tạo các kết nối riêng biệt cho mỗi tác vụ không đồng bộ được mở trong phương thức onPreExecute và được đóng trong phương thức onPostExecute.
Điều này đã dẫn đến rất nhiều mở và đóng kết nối, và tôi tự hỏi nếu tạo kết nối db có sẵn trên toàn cầu trong ngữ cảnh ứng dụng là một ý tưởng hay. Nó chắc chắn sẽ dọn sạch rất nhiều mã và loại bỏ bất kỳ ngoại lệ db không được tiết lộ nào đang xảy ra nếu tôi quên đóng kết nối hoặc ứng dụng đóng một lực. Bất kỳ ai khác đã thử điều này/thấy bất kỳ vấn đề với cách tiếp cận này?
Đây là thực hành tốt, hãy làm. Vấn đề chính cần tránh là rò rỉ bộ nhớ từ việc sử dụng ngữ cảnh ứng dụng, đây không phải là vấn đề nếu nó chỉ dành cho các hoạt động cơ sở dữ liệu. – stealthcopter