Состояние приложения виджета Android - PullRequest
0 голосов
/ 06 февраля 2011

У меня есть Android Widget, Действия по настройке и часто используемый Сервис Android, полный функций. Я хочу поддерживать глобальное состояние / статус приложения, на которое можно ссылаться из любого из указанных выше мест. Состояние, на которое я ссылаюсь, является специфическим статусом домена приложения. Например, STARTED, LEVEL1, LEVEL2 и т. Д. Поэтому я хотел бы знать следующее:

1) Каковы преимущества Global Singleton для сохранения этого состояния / статуса по сравнению с подклассами приложение для Android и использование его в качестве синглтона?

2) Я хочу, чтобы состояние было восстанавливаемым синглтоном. Поэтому мне нужно сохранить его, когда приложение завершает работу, процесс прекращается. Где правильное место для сохранения общего состояния приложения? метод terminate в Application может быть переопределен, но его вызов на самом деле не гарантирован. Поэтому я ищу также точку, в которой можно сохранить состояние приложения. Это не ясно для меня. Activity не является глобальным приложением, ни виджетом, ни службой, поэтому где я могу сказать, что приложение закрывается / завершается и сохраняет состояние приложения.

3) Что-то не так с инициализацией состояния в Application.onStart ()?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2011

1) Каковы преимущества Global Singleton для сохранения этого состояния / статуса по сравнению с подклассом Приложения Android и использованием его в качестве Singleton?

Если под «Глобальным синглтоном» вы подразумеваете статический элемент данных, то в любом случае нет никаких преимуществ или недостатков значимости, ИМХО.

2) Я хочу, чтобы состояние было восстанавливаемым синглтоном. Поэтому мне нужно сохранить его, когда приложение закрывается, процесс прекращается. Где правильное место для сохранения общего состояния приложения?

Каждый раз, когда он меняется, более или менее.

Activity не является глобальным приложением, ни виджетом, ни службой, поэтому где я могу сказать, что приложение закрывается / завершается, и сохранять состояние приложения.

Тебе не сказали. Следовательно, вы сохраняете его каждый раз, когда он меняется. Ваш статический член данных, Application объект или что-то еще, что является кешем для постоянных данных - все остальное подлежит полному уничтожению. (вставьте злой маниакальный смех здесь)

3) Что-то не так с инициализацией состояния в Application.onCreate ()? (Исправлено) * * тысяча двадцать-одна

Полагаю, вы имеете в виду onCreate(). Вы находитесь в главном потоке приложений, поэтому ввод / вывод может быть запущен в onStart(), но должен происходить в AsyncTask или другом фоновом потоке.

0 голосов
/ 06 февраля 2011

Почему бы не воспользоваться Сервисом?Это хорошее место, чтобы сохранить живое состояние.AFAIK гарантируется, что Service является одиночным, и onCreate () и / или onStartCommand () предлагают места, подходящие для инициализации.Мне неясно, какая гарантия, что onDestroy () будет вызван, но документы, кажется, говорят, что это будет:

"Служба может быть как запущена, так и иметь связанные с ней соединения. В таком случае система будетпродолжайте работу службы до тех пор, пока она либо запущена, либо имеется одно или несколько подключений к ней с флагом Context.BIND_AUTO_CREATE. Как только ни одна из этих ситуаций не выполняется, вызывается метод службы onDestroy () и служба эффективно завершается. ref

...