最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Android系统启动流程(四)Launcher启动过程与系统启动流程

IT圈 admin 13浏览 0评论

2024年3月13日发(作者:翦艳卉)

Android系统启动流程(四)Launcher

启动过程与系统启动流程

前言

此前的文章我们学习了init进程、Zygote进程和SyetemServer进程的启动过程,这一篇文章

我们就来学习Android系统启动流程的最后一步:Launcher的启动流程,并结合本系列的前

三篇文章的内容来讲解Android系统启动流程。建议读这篇文章前要通读本系列的前三篇文

章,否则你可能不会理解我在讲什么。

er概述

Android系统启动的最后一步是启动一个Home应用程序,这个应用程序用来显示系统中已

经安装的应用程序,这个Home应用程序就叫做Launcher。应用程序Launcher在启动过程

中会请求PackageManagerService返回系统中已经安装的应用程序的信息,并将这些信息封

装成一个快捷图标列表显示在系统屏幕上,这样用户可以通过点击这些快捷图标来启动相应

的应用程序。

er启动流程

SyetemServer进程在启动的过程中会启动PackageManagerService,PackageManagerService

启动后会将系统中的应用程序安装完成。在此前已经启动的ActivityManagerService会将

Launcher启动起来。

启动Launcher的入口为ActivityManagerService的systemReady函数,如下所示。

frameworks/base/services/Java/com/android/server/

private void startOtherServices() {

...

Ready(new Runnable() {

@Override

public void run() {

Slog.i(TAG, "Making services ready");

ootPhase(

_ACTIVITY_MANAGER_READY);

...

}

...

}

在startOtherServices函数中,会调用ActivityManagerService的systemReady函数:

frameworks/base/services/core/java/com/android/server/am/

public void systemReady(final Runnable goingCallback) {

...

synchronized (this) {

...

FocusedStackTopActivityLocked();

erSwitchBroadcastsLocked(-1, currentUserId);

}

}

systemReady函数中调用了ActivityStackSupervisor的resumeFocusedStackTopActivityLocked

函数:

frameworks/base/services/core/java/com/android/server/am/

boolean resumeFocusedStackTopActivityLocked(

ActivityStack targetStack, ActivityRecord target, ActivityOptions targetOptions) {

if (targetStack != null && isFocusedStack(targetStack)) {

return TopActivityUncheckedLocked(target, targetOptions);//1

}

final ActivityRecord r = ningActivityLocked();

if (r == null || != RESUMED) {

TopActivityUncheckedLocked(null, null);

}

return false;

}

在注释1处会调用ActivityStack的resumeTopActivityUncheckedLocked函数,ActivityStack

对象是用来描述Activity堆栈的,resumeTopActivityUncheckedLocked函数如下所示。

frameworks/base/services/core/java/com/android/server/am/

boolean resumeTopActivityUncheckedLocked(ActivityRecord prev, ActivityOptions options) {

if (meTopActivity) {

// Don't even start recursing.

return false;

}

boolean result = false;

try {

// Protect against recursion.

meTopActivity = true;

if (creenShown ==

_SCREEN_LEAVING) {

creenShown =

_SCREEN_HIDDEN;

SleepIfNeededLocked();

}

2024年3月13日发(作者:翦艳卉)

Android系统启动流程(四)Launcher

启动过程与系统启动流程

前言

此前的文章我们学习了init进程、Zygote进程和SyetemServer进程的启动过程,这一篇文章

我们就来学习Android系统启动流程的最后一步:Launcher的启动流程,并结合本系列的前

三篇文章的内容来讲解Android系统启动流程。建议读这篇文章前要通读本系列的前三篇文

章,否则你可能不会理解我在讲什么。

er概述

Android系统启动的最后一步是启动一个Home应用程序,这个应用程序用来显示系统中已

经安装的应用程序,这个Home应用程序就叫做Launcher。应用程序Launcher在启动过程

中会请求PackageManagerService返回系统中已经安装的应用程序的信息,并将这些信息封

装成一个快捷图标列表显示在系统屏幕上,这样用户可以通过点击这些快捷图标来启动相应

的应用程序。

er启动流程

SyetemServer进程在启动的过程中会启动PackageManagerService,PackageManagerService

启动后会将系统中的应用程序安装完成。在此前已经启动的ActivityManagerService会将

Launcher启动起来。

启动Launcher的入口为ActivityManagerService的systemReady函数,如下所示。

frameworks/base/services/Java/com/android/server/

private void startOtherServices() {

...

Ready(new Runnable() {

@Override

public void run() {

Slog.i(TAG, "Making services ready");

ootPhase(

_ACTIVITY_MANAGER_READY);

...

}

...

}

在startOtherServices函数中,会调用ActivityManagerService的systemReady函数:

frameworks/base/services/core/java/com/android/server/am/

public void systemReady(final Runnable goingCallback) {

...

synchronized (this) {

...

FocusedStackTopActivityLocked();

erSwitchBroadcastsLocked(-1, currentUserId);

}

}

systemReady函数中调用了ActivityStackSupervisor的resumeFocusedStackTopActivityLocked

函数:

frameworks/base/services/core/java/com/android/server/am/

boolean resumeFocusedStackTopActivityLocked(

ActivityStack targetStack, ActivityRecord target, ActivityOptions targetOptions) {

if (targetStack != null && isFocusedStack(targetStack)) {

return TopActivityUncheckedLocked(target, targetOptions);//1

}

final ActivityRecord r = ningActivityLocked();

if (r == null || != RESUMED) {

TopActivityUncheckedLocked(null, null);

}

return false;

}

在注释1处会调用ActivityStack的resumeTopActivityUncheckedLocked函数,ActivityStack

对象是用来描述Activity堆栈的,resumeTopActivityUncheckedLocked函数如下所示。

frameworks/base/services/core/java/com/android/server/am/

boolean resumeTopActivityUncheckedLocked(ActivityRecord prev, ActivityOptions options) {

if (meTopActivity) {

// Don't even start recursing.

return false;

}

boolean result = false;

try {

// Protect against recursion.

meTopActivity = true;

if (creenShown ==

_SCREEN_LEAVING) {

creenShown =

_SCREEN_HIDDEN;

SleepIfNeededLocked();

}

发布评论

评论列表 (0)

  1. 暂无评论