Application.onCreate(). Инициализация приложения происходит в методе ActivityThread.main() до зацикливания очереди сообщений вызовом Looper.loop():1. При создании объекта
ActivityThread инициализируется приватное поле типа ApplicationThread;2. На
ActivityThread вызывается метод attach(), в котором на ActivityManagerService вызывается метод attachApplication(). Этот метод получает объект ApplicationThread как параметр.3. В
ActivityManagerService.attachApplication() происходит инициализация параметров, необходимых для старта приложения, и вызывается метод ApplicationThread.bindApplication().4. В методе
bindApplication() составляется объект AppBindData, содержащий информацию о стартующем приложении, и отправляется сообщение через Handler c кодом BIND_APPLICATION в поле what и объектом AppBindData в поле data. Хэндлер добавляет сообщение в MessageQueue.5. После окончания отработки
ActivityThread.main() и вызова метода Looper.loop() сообщение из очереди обрабатывается в методе handleMessage() хэндлера, созданного в ActivityThread.6. По what-коду сообщение передается в метод
handleBindApplication(), который вызывает LoadedApk.makeApplication(), где создается объект класса Application методом Instrumentation.newApplication();7. Далее с созданным объектом
Application в качестве параметра вызывается метод Instrumentation.callApplicationOnCreate(app), который и вызывает метод Application.onCreate().