目录
一、简述
二、启动流程说明(一)
三、启动流程说明(二)
四、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
二、启动流程说明(一)
- Android的servicemanager文件位于/system/bin/servicemanager中,在系统启动一开始会通过源码为ServiceManager.java的文件实例化一个Daemon Process,用于在后台维护系统的运行;
- 启动/system/bin下的zygote的时候实际上启动了app_main.cpp,该系统文件CPP位于frameworks/base/cmds/app_process/app_main.cpp文件中;
- 在app_main.cpp调用了AndroidRuntime.cpp,如何AndroidRuntime.cpp通过JNI调用了ZygoteInit.java,ZygoteInit.java又调用了SystemServer.java;
- SystemServer.java通过JNI调用了com_android_server_systemService.app,然后通过运行system_init.cpp反过来调用SystemServer.java中的init2()这个方法,此时在init2()这个方法中调用了runtime->callStatic("com/android/server/SystemServer","init2")启动ServerThread线程。
三、启动流程说明(二)
服务线程ServerThread包含下面的功能:
- PowerManagerService:电源管理;
- ActivityMangerService:组件管理;
- WindowManagerService:窗口管理;
- 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启动生命周期流程的简要介绍,难免存在不足之处。如有任何错误或改进意见,请不吝指正和建议。