0

Я разрабатываю виджет главного экрана, и я использую базу данных Android Android. Я применил простой класс DBAdapter с помощью простых методов (добавление, удаление, получение записей ...) для обработки работы базы данных. Он работает, но теперь я думаю о том, как это сделать.Как и где хранятся постоянные объекты (например, адаптеры db) в AppWidgetProvider?

Самая большая проблема для меня - как (и где) хранить экземпляр моего DBAdapter. Если бы я использовал Activity, это было бы очень просто - я создам экземпляр моего DBAdapter в методе onCreate, и все в порядке. Но теперь у меня нет такого варианта, поскольку я использую AppWidgetProvider и несколько IntentServices. AppWidgetProvider (BroadcastReceiver) живет только определенное время - во время выполнения метода onReceive. IntentService также «заканчивается» после завершения необходимой работы. Итак, как и где хранить экземпляр моего DBAdapter? Я не хочу создавать каждый раз новый экземпляр DBAdapter.

Я думал об этом: сделайте DBAdapter singleton clas или используйте статические классы &, другой вариант - использовать Gson для хранения DBAdapter для sharedPreferences или, возможно, использовать сериализацию. Но я бы предпочел спросить. Каков правильный способ сделать это? Thx много

ответ

0

Самая большая проблема для меня - как (и где) хранить экземпляр моего DBAdapter.

Pro совет: не заканчиваются занятия с Adapter, когда они не наследуют от android.widget.Adapter.

Я не хочу создавать каждый раз новый экземпляр DBAdapter.

Добро пожаловать, чтобы сделать его одиночным/статическим данным. Однако, как только ваш процесс завершится, он исчезнет, ​​и вам все равно нужно будет создать новый. Поэтому я рекомендую вам просто создать экземпляр по мере необходимости в вашем IntentService. A DBAdapter «с помощью простых методов (добавление, удаление, получение записей ...)» должно быть чрезвычайно дешевым для создания экземпляра.

другой вариант использовать Gson для хранения DBAdapter к sharedPreferences, или, возможно, использовать сериализацию

Это не имеет никакого смысла. Единственными данными значения в DBAdapter должны быть SQLiteOpenHelper (или SQLiteDatabase из какого-либо другого источника), который сам по себе не может быть сохранен. Более того, это, вероятно, будет ~ 1000 раз медленнее, чем просто создание нового экземпляра DBAdapter.

+0

thx, я последую вашим советам;) – qkx

+0

но, как это сделать, если мне нужно написать db из многократных сервисов? Например, dataservice работает на фоне через регулярные промежутки времени и записывает свежие данные в db, а на переднем плане я делаю некоторые записи в зависимости от пользователя - если эти записи одновременно в одно и то же время (иногда это происходит), я получаю исключение 'android.database. sqlite.SQLiteException: код ошибки 5: база данных заблокирована'. Что теперь? Подробнее здесь: http://stackoverflow.com/questions/10798233/concurrent-writing-to-android-database-from-multiply-services – qkx