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

Где main() в Android?

Я новичок в Android, и изучал структуру, и это заставило меня задать этот вопрос. Поскольку мы расширяем Activity на Android, там должно быть main где-то в Activity или существует скрытый класс, который реализует Activity, содержащий main.

Я смотрел повсюду, но не мог найти его. Я был бы признателен, если бы кто-нибудь мог дать четкое представление об этом.

4b9b3361

Ответ 1

Android использует язык java, но выполняется с использованием модифицированной модели времени исполнения. Как говорили другие, в каждом пакете есть манифест. Точка запуска указана в этом манифесте. Перейдите на сайт Android и выполните основные уроки. Это позволит вам работать с пониманием процесса создания/развертывания/запуска и основного жизненного цикла приложения.

Ответ 2

В основных программах Java нам нужен метод main(), так как при выполнении байтового кода JVM будет искать метод main() в классе и запускать его там.

В случае Android, виртуальная машина Dalvik предназначена для поиска класса, который является подклассом Activity и который устанавливается как LAUNCHER для запуска выполнения приложения из его метода onCreate(), поэтому там не нужен метод main().

Для получения дополнительной информации см. жизненный цикл Activity.

Ответ 3

На самом деле, метод main() - это ракурс Android android.app.ActivityThread. Этот метод создает Main (UI) Thread для процесса ОС, устанавливает на нем Looper и запускает цикл событий.

Структура Android отвечает за создание и уничтожение процессов ОС, запуск приложений, запуск действий, сервисов и других компонентов. ActivityManager является частью платформы Android и отвечает за координацию и управление различными компонентами.

Архитектура Android немного отличается от архитектуры, которую можно использовать для автономных приложений Java. Самое большое различие заключается в том, что все ваши компоненты (Activity, Service, BroadcastReceiver и т.д.) Не обязательно запускаются в том же ОС или на той же виртуальной машине (VM). Возможно иметь компоненты из одного приложения, работающего в разных операционных системах ОС, а также возможно наличие компонентов из разных приложений, работающих в одном и том же ОС. В традиционной Java метод main() - это метод, который вызывается виртуальной машиной после того, как был создан процесс ОС, и виртуальная машина завершила свою инициализацию.

Ответ 4

Прочитайте эту запись в блоге, чтобы понять, как запускается Android-приложение:

При запуске системы Android ядро ​​Linux сначала вызывает процесс "init". init читает файлы "/init.rc" и "init.device.rc". "init.device.rc" является специфичным для устройства, на виртуальном устройстве этот файл называется "init.goldfish.rc".

init.rc запускает процесс "Zygote" через программу "/system/bin/app_process". Zygote загружает основные классы Java и выполняет их первоначальную обработку. Эти классы могут быть повторно использованы Android, и поэтому этот шаг делает их быстрее Начало. Как только начальная работа Zygote завершена, процесс прослушивает сокет и ждет запросов.

Если вы посмотрите в классе ZyogoteInit, вы найдете основной метод.

Как отмечали другие, этот метод main() участвует в настройке среды Android-приложений. Что касается разработчика, отправной точкой является метод onCreate() активности Launcher.

Ответ 5

В Android OS использует виртуальную машину Dalvik. Основная точка входа в выполнение приложения инкапсулирована в рамках. Вы можете взглянуть на " Что такое Android?"

Фактически, каждая активность в Android может рассматриваться как одно приложение самостоятельно с собственным жизненным циклом.

Ответ 7

Вы скажете, какой из них запускать при запуске в файле манифеста. Нет функции main(), потому что этого не должно быть. main() может быть конвенцией, используемой для "обычных" java-приложений, но это не для таких вещей, как апплеты браузера. Система создает объект активности и вызывает в нем методы, которые могут быть или не быть вызваны main. В этом случае это не так.

onCreate отличается от метода main() и от конструктора тем, что его можно вызывать дважды в одном действии, например, если процесс убит и пользователь переходит к активности. См. this

Многие вещи, которые вы можете рассматривать как приложение Java, не имеют собственного метода main(). Например, IIRC, сервлеты, WARs и т.д. Не имеют методов main() - метод main(), если он есть, находится в контейнере.

Ответ 8

Когда вы запускаете новый процесс для запуска приложения/службы, наконец, в 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");
}

Основная функция инициирует действие, которое отправляет сообщение IPC, чтобы уведомить Activity Manager об успешном запуске процесса, затем после уведомления процесса, инициирующего начало нового процесса этого события, Activity Manager уведомит новый процесс о выполнить процесс запуска реальной активности, который создает класс Activity в соответствии с манифестом, затем вызывает OnCreate и т.д.

Здесь есть несколько ответов, которые совершенно неверны: они получают много голосов, надеются, что умеренный и т.д. Могут это проверить.