Динамические глобальные переменные конфигурации в Android - PullRequest
1 голос
/ 25 января 2012

Я новичок в разработке Android. Я сделал приложение на Android, но после долгого сна моего приложения в фоновом режиме я столкнулся с падением. Я пробовал синглтоны и вспомогательное приложение, но оба они приводят к сбою после долгого сна.

Конфигурация, которую я сохраняю, представляет собой список объектов, многие из которых. Также эта конфигурация должна быть доступна во всем приложении.

Любая идея, как справиться с этим? Я искал веб-сайты в поисках ответа, но безуспешно. Так как предпочтение Shared - только String, boolean, integer и float ... также я нацеливаюсь на Android 2.1 и выше.

Существует ли какая-либо простая процедура, позволяющая избежать изменения всего механизма приложения?

Спасибо

1 Ответ

0 голосов
/ 25 января 2012

У меня был плохой опыт работы с Singletons в Android. Проблема состоит в том, что Singleton может пережить приложение, если приложение уничтожено, но jvm не является состоянием Singleton. Состояние не переинициализируется, когда действие перезапускается в том же jvm, то есть с тем же экземпляром singleton (подключенным к старому класс загрузчик). Объясняет ли это поведение вашего приложения.

Возможное решение - использовать экземпляр приложения, созданный Android. Его жизненный цикл управляется android, и вы можете управлять состоянием в onCreate (), ... Начиная с уровня API 14 существуют также обратные вызовы жизненного цикла активности. Смотрите здесь для получения дополнительной информации: http://developer.android.com/reference/android/app/Application.html#registerActivityLifecycleCallbacks%28android.app.Application.ActivityLifecycleCallbacks%29

Если мне нужна глобальная переменная, а база данных или общие настройки не подходят, я обычно использую экземпляр приложения для хранения состояния. Вы можете получить инициализированный экземпляр приложения или службы, вызвав

(MyApplication) this.getApplication();

в вашей деятельности или услуге, например в onCreate (). Вы инициализируете свой экземпляр MyApplication (который расширяет Application) в его методе onCreate ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...