Где находится main() в Android?
Я новичок в Android и изучал фреймворк, что побудило меня задать этот вопрос. Поскольку мы расширяем класс Activity в Android, предполагается, что где-то в Activity должен быть метод main
или существует скрытый класс, который реализует Activity и содержит метод main
.
Я искал повсюду, но не смог его найти. Было бы полезно, если кто-то смог бы дать ясное объяснение этому вопросу.
5 ответ(ов)
В классических Java-программах нам необходим метод main()
, поскольку при выполнении байт-кода JVM ищет этот метод в классе и начинает выполнение с него.
В случае Android Dalvik Virtual Machine (после Android 5.0 DVM была заменена на Android Runtime) предназначена для поиска класса, который является подклассом Activity
и который установлен как LAUNCHER. С этого класса начинается выполнение приложения с метода onCreate()
, поэтому необходимость в методе main()
отсутствует.
Для получения дополнительной информации посмотрите на цикл жизни Activity
.
На самом деле метод main()
в Android представляет собой класс android.app.ActivityThread
. Этот метод создает основной (UI) поток для процесса ОС, настраивает Looper
и запускает цикл обработки событий.
Android-фреймворк отвечает за создание и уничтожение процессов ОС, запуск приложений, а также старт активностей, сервисов и других компонентов. ActivityManager
является частью Android-фреймворка и отвечает за координацию и управление различными компонентами.
Архитектура Android немного отличается от того, к чему вы, возможно, привыкли в обычных Java-приложениях. Основное отличие заключается в том, что все ваши компоненты (Activity
, Service
, BroadcastReceiver
и т. д.) не обязательно работают в одном и том же процессе ОС или в одной виртуальной машине (VM). Возможна ситуация, когда компоненты одного приложения работают в разных процессах ОС, а также возможно, что компоненты разных приложений работают в одном и том же процессе ОС. В традиционной Java метод main()
вызывается виртуальной машиной после создания процесса ОС и завершения инициализации виртуальной машины.
Android использует язык Java, но выполняет его с помощью модифицированной модели выполнения. Как уже упоминали другие, в каждом пакете есть манифест, в котором указывается точка входа. Рекомендуется посетить официальный сайт Android и пройти базовые/tutorials. Это поможет вам разобраться в процессе создания, развертывания и запуска приложения, а также в основах жизненного цикла приложения.
Метод onCreate()
является одним из ключевых методов в жизненном цикле класса Activity
в Android. Он вызывается, когда активити создается, и служит для инициализации компонентов интерфейса пользователя и выполнения любой другой необходимой настройки, такой как настройка баз данных или загрузка данных.
Для более подробной информации о жизненном цикле Activity
, вы можете ознакомиться с официальной документацией по адресу: Android Activity.
В общем, жизненный цикл Activity
включает такие методы, как onCreate()
, onStart()
, onResume()
, onPause()
, onStop()
и onDestroy()
, которые управляют состоянием активности и обеспечивают плавное взаимодействие пользователя с приложением.
Когда вы запускаете новый процесс для выполнения приложения или сервиса, в ActivityManagerService.java вы увидите следующий код:
final String entryPoint = "android.app.ActivityThread";
return startProcessLocked(hostingType, hostingNameStr, entryPoint, app, uid, gids,
runtimeFlags, mountExternal, seInfo, requiredAbi, instructionSet, invokeWith,
startTime);
Этот код в конечном итоге вызывает Process.start
. Это аналогично стандартному поведению Java: вы передаете имя класса, и виртуальная машина создает новый процесс и выполняет метод main()
из ActivityThread.java:
public static void main(String[] args) {
......
Looper.loop();
throw new RuntimeException("Main thread loop unexpectedly exited");
}
Метод main
запускает действия, которые отправляют IPC сообщение для уведомления Activity Manager о том, что процесс был успешно запущен. После того как новое событие о запуске процесса было инициировано, Activity Manager уведомляет новый процесс, чтобы начать реальный процесс инициализации активности. Это включает создание класса Activity в соответствии с манифестом и вызов методов onCreate
и т.д.
Здесь есть несколько ответов, которые совершенно неверны, но получили много голосов. Я надеюсь, что модераторы смогут это проверить.
Ошибка «Необходимо переопределить метод суперкласса» после импорта проекта в Eclipse
Использование контекста в фрагменте
Как заставить Android-устройство вибрировать с разной частотой?
Room - Директория экспорта схемы не указана аннотационному процессору, не удается экспортировать схему
Как сгенерировать уникальный хеш-код для строкового ввода в Android?