Инициализация приложения Android - PullRequest
13 голосов
/ 21 декабря 2009

У меня есть приложение, которое управляется конфигурационным XML: различные свойства приложения загружаются во время запуска приложения путем анализа XML и инициализация статических переменных некоторого класса. Данные, прочитанные из этого XML управляет различными действиями приложения. В настоящее время у меня есть называется "разбор и инициализация свойств" из onCreate () моей основной деятельности.

У меня есть несколько вопросов относительно этого случая / подхода:

  1. Должен ли я вызывать метод инициализации приложения из приложения Объект или текущий подход правильный? Какие преимущества / недостатки есть / мы получим / имеем, если я решу вызвать его из Объект приложения?

  2. Нужен ли нам статический класс для хранения свойств приложения? Или мы можем иметь все свойства как статическую переменную Collection в объекте приложения?

  3. Анализ XML (~ 200 узлов) во время загрузки приложения может занять некоторое время (не конечно как долго); Как я могу избежать страшных ANR? Я использую Pull Parser.

Пожалуйста, помогите мне найти ответы на эти вопросы.

Спасибо.

Ответы [ 2 ]

10 голосов
/ 21 декабря 2009
  1. Это зависит от того, что вы инициализируете. onCreate() приложения следует использовать, когда вы выполняете действия, которые необходимо выполнить, прежде чем какая-либо часть вашего приложения будет работать правильно, и это нужно сделать только один раз, тогда как onCreate() Activity / Service / etc следует использовать для вещей, которые необходим только для этого компонента и должен выполняться несколько раз.

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

  2. Похоже, вы должны проверить SharedPreferences , особенно PreferenceManager.getDefaultSharedPreferences () . Предпочтения будут сохраняться между сессиями, и это дает вам легкий доступ к простым свойствам из любого контекста.

  3. Threading. Я считаю AsyncTask самым простым способом выполнить эту задачу; хорошая запись на это в Google . В качестве альтернативы, вы можете запустить Службу, чтобы сделать это в фоновом режиме, при этом активность на переднем плане информирует пользователя о том, что вы загружаете приложение.

4 голосов
/ 21 декабря 2009

Объект Приложение используется для совместного использования непостоянного состояния в приложении. Я не думаю, что вам вообще нужно использовать класс Application. Вы можете выполнить инициализацию в onCreate() методе Activity, который вызывается первым. Чтобы процитировать документацию :

Подкласс является необязательным; большинству приложений он не нужен. В отсутствие подкласса Android использует экземпляр базового класса Application.

Вам не нужно создавать свой собственный класс для хранения свойств приложения. Это сделано для вас SharedPreferences.

Вам также следует взглянуть на метод setDefaultValues() в PreferenceManager класс, поскольку это установит предпочтения из данных в файле XML. Что хорошо в этом методе, так это использование параметра readAgain, чтобы XML анализировался только один раз - при первом запуске приложения, а не каждый раз.

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