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()
.