У меня есть приложение, которое хранит некоторые данные в базе данных SQLite. Также я выполняю большой запрос в моем приложении. У меня есть около 15 действий. И почти все используют БД для запроса данных.
Но я открываю свою БД в каждом действии и закрываю в onDestroy {...} каждого действия.
Проблема в том, что onDestroy {...} может никогда не вызываться, и иногда мое приложение остается включенным в течение длительного времени, и я переключаюсь с активности на другое открытие во много раз мою БД.
И иногда я получаю сообщения об ошибках, например, слишком много раз открываю и никогда не закрываю.
Я бы попытался закрыть свою БД точно после того, как получу от нее свои данные и закрою ее ... перейдя к следующему действию и снова открыв и так далее .....
Но проблема в том, что в некоторых действиях я возвращаюсь из других действий ... закрытие базы данных и возвращение к этому занятию приводят к большому закрытию силы.
Что я хочу сделать, так это открыть мою БД в начале моего приложения и закрыть ее в конце, но я сталкиваюсь с 2 проблемами:
1.
Должен ли я сделать свой класс SQLiteOpenHelper одноэлементным? ... получить экземпляр этого ... открыть его в моем первом действии, а затем в моих следующих действиях просто получить экземпляр моей БД, который уже открыт / ???
2. Где конец моего приложения? Как я должен знать, где находится конец моего приложения и где закрыть мою БД.
EDIT:
public class DBAdapter extends SQLiteOpenHelper {
public DBAdapter(Context context) {
super(context, DATABASE_NAME, null, 1);
this.myContext = context;
}
public void openDataBase() throws SQLException {
String myPath = DATABASE_PATH + DATABASE_NAME;
db = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READWRITE);
}
}
Это фрагмент кода из моего класса, который управляет моей базой данных. Чтобы создать этот синглтон, я должен использовать конструктор, такой:
private DBAdapter()
{
//nothing in here
}
Но это не определено для SQLiteOpenHelper
Редактировать финал:
Вот как я это сделал в соответствии с советами Зираэля:
пакет com.Server_1;
import android.app.Application;
открытый класс MyApplication расширяет приложение {
private static DBAdapter db;
public void onCreate()
{
db=new DBAdapter(getApplicationContext());
db.createDatabase();
db.openDataBase();
}
public static DBAdapter getDatabaseAdapter()
{
return db;
}
}
В каждом задании, где мне нужно подключение к БД, я делаю это:
MyApplication myApplication = (MyApplication) this.getApplication ();
DBAdapter db = myApplication.getDatabaseAdapter ();
И, наконец, мой манифест выглядит так:
<application android:icon="@drawable/icon"
android:label="@string/app_name"
android:name=".MyApplication"
android:debuggable="true">