Я новичок в разработке Android (если честно, в разработке в целом), и поэтому я читал руководство Commonsware Busy Coder. При чтении раздела SQLite есть пара вещей, которые мне не ясны на 100%. Ниже приводится то, что, по моему мнению, происходит, а также некоторые вопросы. Пожалуйста, поправьте меня, если я ошибаюсь в своем мыслительном процессе.
Автор предполагает, что если вы собираетесь использовать базу данных из более чем одного действия в своем приложении, вам не следует использовать ссылку контекста из каждого действия для создания экземпляра SQLiteOpenHelper. Вместо этого вы должны использовать getApplicationContext()
, предоставленный Activity.
Делая это, он использует тот факт, что getApplicationContext()
извлекает одноэлементный экземпляр Context, созданный вскоре после начала процесса приложения. Вот тут возникает мой вопрос. Я думаю, что если бы я использовал контекст, предоставленный действием (это ключевое слово) при создании экземпляра SQLiteOpenHelper, каждое действие создало бы свой собственный экземпляр SQLiteOpenHelper. Мне кажется, что простое использование контекста действия не информирует контекст приложения о том, что уже создан экземпляр SQLiteHelper, и, следовательно, он создает новый вместо повторного использования существующего. Правильно ли мое мышление?
Я думаю о Context (и поправьте меня, если я ошибаюсь) как о «шлюзе» разработчика для получения информации и ресурсов, предоставляемых ОС Android (т.е. получения системной службы через getSystemService()
). Но использование this (из действия) или использование getApplicationContext()
имеет разные последствия. Используя это, вы получите экземпляр Context, который является «локальным» для вашей текущей активности, но использование getApplicationContext()
ссылается на все приложение. Если это правильно, означает ли это, что когда я передаю ссылку на getApplicationContext()
в конструктор SQLiteOpenHelper, это сообщит всему моему приложению, что экземпляр моего SQLiteOpenHelper уже существует? созданный. Как SQLiteOpenHelper сообщает об этом приложению? использует ли он какой-либо статический метод, такой как public/private static dbCreated(Context context){//позволяет контексту знать, что запущен экземпляр этого}, чтобы сообщить приложению?
Извините, если это сбивает с толку.
Спасибо заранее