Где ввести код для запуска приложения?
Android newbee здесь, у меня есть код, который я хочу запустить, когда приложение для Android сначала запускается. Он проверяет версию локальной базы данных и загружает новую версию, если текущая версия устарела. Я придерживаюсь этого в своей первой деятельности, совершенно уверен, что должно быть лучшее место для этого. Любые рекомендации где-нибудь я могу указать, где он будет вызван один раз при запуске?
Ответы
Ответ 1
Вы можете написать собственный класс приложения (расширение от android.app.Application). Переопределить onCreate
, чтобы указать, что происходит при запуске приложения:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// Do something here.
}
}
Затем вам необходимо зарегистрировать свой пользовательский класс в файле манифеста:
<application ... android:name="fully.qualified.MyApplication">
Edit:
В ответ на Дэвида Чезарино я не согласен с целями класса Application
. Если вы полагаетесь на Activity
onCreate
, то что бы остановить его от того, чтобы стать одним и тем же огромным классом разных целей... если вам нужно что-то случится, когда приложение запустится, вы должны где-то написать этот код; и Activity
, вероятно, станет более загроможденным, потому что вы должны выполнить в нем определенную логику Activity
. Если вас беспокоит беспорядок, отделите логику на другие классы и вызовите их из Application
. Использование SharedPreferences
для определения того, должна ли выполняться логика, похоже, больше связана с проблемой, которая уже решена.
Диана Хакборн, похоже, ссылается на данные, а не на логику, в которых я полностью согласен. Статические переменные намного лучше, чем переменные уровня приложения... лучшая область охвата и безопасность типов упрощают упрощение/удобочитаемость.
Ответ 2
Сначала рассмотрим жизненный цикл активности.
Отвечая на ваш вопрос, вы можете поместить код в любой из этих "пусковых" методов, в зависимости от того, что вы хотите делать, и, что важно, когда вы хотите его запустить. Для того, что вы просили, onCreate
является разумным местом.
Я вставлял его в oncreate своей первой активности, довольно уверен, что должно быть лучшее место для этого.
И почему? Любой код имеет точку входа, не так ли? В Android Activities это просто onCreate
(опять же, см. Ссылку выше для полной информации). Помимо обработки событий, которые являются ответами на события, происходящие вне основной последовательности вызовов, вы помещаете материал в onCreate
.
Если вы обеспокоены тем, что метод становится огромным, то это еще одна проблема. Я говорю, уточню свой код. Для проверки предварительного материала люди обычно предоставляют "Загрузка", перед началом основного действия приложения.
отредактирован:
Это продолжение того, что предложил drumboog, так как мой комментарий начал увеличиваться по сложности, чтобы быть "просто комментарием".
Лично я бы не стал расширять класс Application
только для того, чтобы выполнить код на ранней стадии, более того, это код, который не так чувствителен в приоритетном порядке (базы данных версий). Класс Application
в основном используется как простой способ сохранять состояние Activity
, а не как "делать все". Короче говоря, я чувствую, что класс Application
обычно злоупотребляют.
Для чего вы хотите, вы можете достичь этого кода вызова в Activity
onCreate
. Это уменьшает сложность, потому что я видел людей, набивающих Application
, пока он не станет огромным классом разных кодовых целей. И это не-нет для обслуживания, с собственными логическими проблемами.
Кроме того, если вы действительно хотите другое решение, полностью не связанное с пользовательским интерфейсом, вы должны подумать о реализации Service
вместо этого (но я не думаю, что это необходимо именно для этого).
Оба эти проблемы ранее рассматривались Dianne Hackborn (или то, что я получил от ее сообщения).