Подтвердить что ты не робот

Где ввести код для запуска приложения?

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

4b9b3361

Ответ 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 (или то, что я получил от ее сообщения).