2011-02-06 5 views
0

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

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

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

3) Неужели им что-то не так с инициализацией состояния в Application.onStart()?

+0

нет 'Application.onStart()' – techiServices

+0

Правильный Я имел в виду Application.onCreate() – Androider

ответ

0

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

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

+0

Ну, первый вопрос действительно в том, где должно находиться пользовательское состояние приложения. Предположим, ваше приложение имеет n сервисов? вы бы сделали одну такую ​​службу той, которая хранила общее состояние? Думаю, нет. Возьмем общий пример 1 приложения, n сервисов, y виджетов. Похоже, что это общее состояние приложения действительно относится к приложению, а не к его компонентам? – Androider

+0

Имейте в виду, что речь идет о совместном использовании, а не просто хранении. Правда, вы можете хранить все в любом месте и получать в любом месте, но это не обеспечивает совместное совместное использование. Это также не логично предпочтение. – Androider

+0

> сделать одну такую ​​службу той, которая хранила общее состояние? Думаю, нет. Почему нет? Согласно документам «Служба - это компонент приложения, представляющий либо желание приложения выполнить более продолжительную операцию, либо предлагать функциональные возможности для других приложений». Это одноэлементный, долговременный и доступный для других компонентов или даже других приложений. Кажется естественным составным типом, все готовым сохранить (и сохраняться) «пользовательское состояние приложения». – DJC

0

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

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

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

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

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

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

3) Неужели им что-то не так с инициализацией состояния в Application.onCreate()?(исправлено)

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

+0

3) Правильно я имел в виду onCreate – Androider

+0

3) часть ссылок инициализации получается путем выполнения registerReceiver (null, Intent) для получения системных значений. Будет ли это соответствовать onCreate, насколько ANR, или было бы более целесообразно передать запрос инициализации Intent на услугу? – Androider

+0

@ Androider: 'registerReceiver()' должен принимать микросекунды и не должен быть проблемой. – CommonsWare

Смежные вопросы