Инициализация приложений для Android
У меня есть приложение, которое управляется конфигурацией XML: различные
свойства приложения загружаются во время запуска приложения, анализируя XML и
инициализация статических переменных некоторого класса. Данные, прочитанные из этого
XML-диски разные. Действия приложения. В настоящее время у меня есть
называемый "синтаксический анализ и инициализация свойств" из
onCreate() моей основной деятельности.
У меня есть несколько вопросов относительно этого случая/подхода:
-
Должен ли я вызвать метод инициализации приложения из приложения
Объект или текущий подход правильный? Какие преимущества/
недостатки делают/получат/имеют, если я захочу вызывать его из
Объект приложения?
-
Нам действительно нужен статический класс для хранения свойств приложения? Или мы можем иметь все свойства как статическую переменную Collection в объекте приложения?
-
Анализ XML (~ 200 узлов) при загрузке приложения может занять некоторое время (не
уверенный, как долго tho); Как я могу избежать страшных ANR? Я использую
Pull Parser.
Пожалуйста, помогите мне найти ответы на эти вопросы.
Спасибо.
Ответы
Ответ 1
Объект Application используется для совместного использования состояния non-persistent в приложении. Я не думаю, что вам нужно будет использовать класс Application
вообще. Вы можете выполнить инициализацию в методе onCreate()
Activity
, который вызывается первым. В укажите документацию:
Подкласс не является обязательным; большинству приложений это не понадобится. В отсутствие подкласса Android использует экземпляр базового класса Application.
Вам не нужно создавать свой собственный класс для хранения свойств приложения. Это делается для вас SharedPreferences
.
Вы также должны посмотреть метод setDefaultValues()
в PreferenceManager
класса, так как это задает предпочтения из данных в XML файле. Что приятно в этом методе, так это использование параметра readAgain
, чтобы XML анализировался только один раз - при первом запуске приложения - не каждый раз.
Ответ 2
-
Это зависит от того, что вы инициализируете. Приложение onCreate()
должно использоваться, когда вы делаете то, что нужно сделать, прежде чем какая-либо часть вашего приложения будет работать правильно, и его нужно выполнить только один раз, тогда как Activity/Service/etc onCreate()
следует использовать для вещей, которые необходим только для этого компонента и должен выполняться несколько раз.
Основная проблема, которую я испытываю для ввода всей вашей инициализации в компонент, заключается в том, что в дальнейшем это упростит ваше приложение. Предположим, вы хотите, чтобы какая-то активность в вашем приложении была доступна по-разному - теперь вам нужно либо переместить код инициализации в приложение, либо вам придется дублировать код инициализации в незанятом действии.
-
Похоже, вы должны проверить SharedPreferences, особенно PreferenceManager.getDefaultSharedPreferences(). Настройки будут сохраняться между сеансами, и это даст вам легкий доступ к простым свойствам из любого Контекста.
-
Threading. Я считаю AsyncTask самым простым способом выполнить эту задачу; там хорошая запись в Google. В качестве альтернативы вы можете запустить службу, чтобы сделать это в фоновом режиме, имея переднюю активность, информировать пользователя о том, что вы загружаете приложение.