Czy powinienem zamknąć kursor po każdym użyciu, czy pozostawić go otwartym, dopóki widok nie zostanie zniszczony?
Zależy. Jeśli wynik kursora nie zmieni się w międzyczasie (np. zdalne połączenie modyfikujące DB), to jest OK. Nie zapomnij użyć CursorLoader
aby Android automatycznie zarządzał kursorem (np. zamknij kursor w przypadku awarii aplikacji).
I to samo w przypadku bazy danych, czy można ją otworzyć po utworzeniu działania, w którym znajduje się ten widok, i zamknąć, gdy działanie zostanie zniszczone?
Tak, możesz otworzyć w onResume()
i zamknij w onPause()
wywołania zwrotne, lub gdy wiesz, że Twoja baza danych nie będzie już odpytywana.
Ciągle otrzymuję błąd „close() nigdy nie był jawnie wywoływany w bazie danych...”, kiedy robię to, co opisano powyżej.
Jest to normalne tylko w przypadku awarii aplikacji. Nie powinno się to zdarzyć, jeśli robisz to tak, jak powiedziałem powyżej.