Android启动之生命周期流程

目录

一、简述

二、启动流程说明(一)

三、启动流程说明(二)

四、ServerThread常用组件的功能介绍


一、简述

第一步:启动Linux:

1.Bootloader

2.kernel

第二步:Android系统启动:入口为Init.rc(system/core/rootdir)

1./system/bin/servicemanager:Binder守护进程;

2.Runtime;

3.Zygote:app_process/App_main;

4.Start VM;

5.System Server;

6.Start Android Services:Register to ServiceManager;

7.Start Launcher;

第三步:应用程序启动:

1.运行PackagerManager


二、启动流程说明(一)

  1. Android的servicemanager文件位于/system/bin/servicemanager中,在系统启动一开始会通过源码为ServiceManager.java的文件实例化一个Daemon Process,用于在后台维护系统的运行;
  2. 启动/system/bin下的zygote的时候实际上启动了app_main.cpp,该系统文件CPP位于frameworks/base/cmds/app_process/app_main.cpp文件中;
  3. 在app_main.cpp调用了AndroidRuntime.cpp,如何AndroidRuntime.cpp通过JNI调用了ZygoteInit.java,ZygoteInit.java又调用了SystemServer.java;
  4. SystemServer.java通过JNI调用了com_android_server_systemService.app,然后通过运行system_init.cpp反过来调用SystemServer.java中的init2()这个方法,此时在init2()这个方法中调用了runtime->callStatic("com/android/server/SystemServer","init2")启动ServerThread线程。

三、启动流程说明(二)

服务线程ServerThread包含下面的功能:

  1. PowerManagerService:电源管理;
  2. ActivityMangerService:组件管理;
  3. WindowManagerService:窗口管理;
  4. PackageManagerService:应用程序是通过该Service启动的。

四、ServerThread常用组件的功能介绍

1.PowerManagerService:电源管理

PowerManagerService负责管理设备的电源相关功能,例如屏幕的开关、休眠模式、电池管理等。
获取PowerManager对象:在Activity或Service中使用以下代码获取PowerManager对象。

PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);

//1.控制屏幕亮度:可以使用PowerManager对象的方法来控制屏幕亮度,例如:
// 将屏幕设置为全亮
powerManager.setBrightness(PowerManager.BRIGHTNESS_MAX);
// 将屏幕设置为最暗
powerManager.setBrightness(PowerManager.BRIGHTNESS_OFF);


//2.控制休眠模式:可以使用PowerManager对象的方法来控制设备的休眠模式,例如:
// 进入休眠模式
powerManager.goToSleep(SystemClock.uptimeMillis());
// 唤醒设备
powerManager.wakeUp(SystemClock.uptimeMillis());


2.ActivityManagerService:组件管理

ActivityManagerService负责管理Android系统中的组件,例如Activity、Service、Broadcast Receiver等。它负责启动、管理和销毁这些组件,并提供与组件生命周期相关的功能。
启动Activity:可以使用Intent和Context的startActivity方法启动一个Activity,例如:

Intent intent = new Intent(this, MyActivity.class);
startActivity(intent);

//1.启动Service:可以使用Intent和Context的startService方法启动一个Service,例如:
Intent intent = new Intent(this, MyService.class);
startService(intent);


//2.注册Broadcast Receiver:可以通过在代码中注册Broadcast Receiver来接收系统广播消息,例如:
BroadcastReceiver receiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BOOT_COMPLETED);
registerReceiver(receiver, filter);


3.WindowManagerService:窗口管理

WindowManagerService负责管理Android系统中的窗口,包括应用程序窗口、系统提示框、悬浮窗口等。它负责窗口的创建、显示、移动、调整大小等操作。
创建一个自定义窗口:可以通过创建一个自定义的View,并将其添加到WindowManager中来创建一个自定义窗口,例如:

WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
MyCustomView myView = new MyCustomView(this);
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
// 设置窗口的位置、大小等参数
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.gravity = Gravity.CENTER;
windowManager.addView(myView, params);


4.PackageManagerService:应用程序启动

PackageManagerService负责管理应用程序的安装、卸载、更新等操作。它提供了获取应用程序信息、启动应用程序等功能。
获取应用程序信息:可以使用PackageManager对象的方法来获取应用程序的信息,例如:

PackageManager packageManager = getPackageManager();
ApplicationInfo appInfo = packageManager.getApplicationInfo("com.example.app", 0);
String appName = appInfo.loadLabel(packageManager).toString();
Drawable icon = appInfo.loadIcon(packageManager);

//1.启动应用程序:可以使用PackageManager对象的方法来启动一个应用程序,例如:
PackageManager packageManager = getPackageManager();
Intent intent = packageManager.getLaunchIntentForPackage("com.example.app");
if (intent != null) {
    startActivity(intent);
}

本文只是对Android启动生命周期流程的简要介绍,难免存在不足之处。如有任何错误或改进意见,请不吝指正和建议。

猜你喜欢

转载自blog.csdn.net/weixin_44715733/article/details/131036973
今日推荐