目錄
一、簡述
二、啟動流程說明(一)
三、啟動流程說明(二)
四、ServerThread常用組件的功能介紹
一、簡述
第一步:啟動Linux:
1.Bootloader
2.kernel
第二步:Android系統(tǒng)啟動:入口為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;
第三步:應(yīng)用程序啟動:
1.運行PackagerManager
二、啟動流程說明(一)
- Android的servicemanager文件位于/system/bin/servicemanager中,在系統(tǒng)啟動一開始會通過源碼為ServiceManager.java的文件實例化一個Daemon Process,用于在后臺維護系統(tǒng)的運行;
- 啟動/system/bin下的zygote的時候?qū)嶋H上啟動了app_main.cpp,該系統(tǒng)文件CPP位于frameworks/base/cmds/app_process/app_main.cpp文件中;
- 在app_main.cpp調(diào)用了AndroidRuntime.cpp,如何AndroidRuntime.cpp通過JNI調(diào)用了ZygoteInit.java,ZygoteInit.java又調(diào)用了SystemServer.java;
- SystemServer.java通過JNI調(diào)用了com_android_server_systemService.app,然后通過運行system_init.cpp反過來調(diào)用SystemServer.java中的init2()這個方法,此時在init2()這個方法中調(diào)用了runtime->callStatic("com/android/server/SystemServer","init2")啟動ServerThread線程。
三、啟動流程說明(二)
服務(wù)線程ServerThread包含下面的功能:
- PowerManagerService:電源管理;
- ActivityMangerService:組件管理;
- WindowManagerService:窗口管理;
- PackageManagerService:應(yīng)用程序是通過該Service啟動的。
四、ServerThread常用組件的功能介紹
1.PowerManagerService:電源管理
PowerManagerService負責管理設(shè)備的電源相關(guān)功能,例如屏幕的開關(guān)、休眠模式、電池管理等。
獲取PowerManager對象:在Activity或Service中使用以下代碼獲取PowerManager對象。
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
//1.控制屏幕亮度:可以使用PowerManager對象的方法來控制屏幕亮度,例如:
// 將屏幕設(shè)置為全亮
powerManager.setBrightness(PowerManager.BRIGHTNESS_MAX);
// 將屏幕設(shè)置為最暗
powerManager.setBrightness(PowerManager.BRIGHTNESS_OFF);
//2.控制休眠模式:可以使用PowerManager對象的方法來控制設(shè)備的休眠模式,例如:
// 進入休眠模式
powerManager.goToSleep(SystemClock.uptimeMillis());
// 喚醒設(shè)備
powerManager.wakeUp(SystemClock.uptimeMillis());
2.ActivityManagerService:組件管理
ActivityManagerService負責管理Android系統(tǒng)中的組件,例如Activity、Service、Broadcast Receiver等。它負責啟動、管理和銷毀這些組件,并提供與組件生命周期相關(guān)的功能。
啟動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來接收系統(tǒng)廣播消息,例如:
BroadcastReceiver receiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BOOT_COMPLETED);
registerReceiver(receiver, filter);
3.WindowManagerService:窗口管理
WindowManagerService負責管理Android系統(tǒng)中的窗口,包括應(yīng)用程序窗口、系統(tǒng)提示框、懸浮窗口等。它負責窗口的創(chuàng)建、顯示、移動、調(diào)整大小等操作。
創(chuàng)建一個自定義窗口:可以通過創(chuàng)建一個自定義的View,并將其添加到WindowManager中來創(chuàng)建一個自定義窗口,例如:
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
MyCustomView myView = new MyCustomView(this);
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
// 設(shè)置窗口的位置、大小等參數(shù)
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.gravity = Gravity.CENTER;
windowManager.addView(myView, params);
4.PackageManagerService:應(yīng)用程序啟動
PackageManagerService負責管理應(yīng)用程序的安裝、卸載、更新等操作。它提供了獲取應(yīng)用程序信息、啟動應(yīng)用程序等功能。
獲取應(yīng)用程序信息:可以使用PackageManager對象的方法來獲取應(yīng)用程序的信息,例如:文章來源:http://www.zghlxwxcb.cn/news/detail-494170.html
PackageManager packageManager = getPackageManager();
ApplicationInfo appInfo = packageManager.getApplicationInfo("com.example.app", 0);
String appName = appInfo.loadLabel(packageManager).toString();
Drawable icon = appInfo.loadIcon(packageManager);
//1.啟動應(yīng)用程序:可以使用PackageManager對象的方法來啟動一個應(yīng)用程序,例如:
PackageManager packageManager = getPackageManager();
Intent intent = packageManager.getLaunchIntentForPackage("com.example.app");
if (intent != null) {
? ? startActivity(intent);
}
本文只是對Android啟動生命周期流程的簡要介紹,難免存在不足之處。如有任何錯誤或改進意見,請不吝指正和建議。文章來源地址http://www.zghlxwxcb.cn/news/detail-494170.html
到了這里,關(guān)于Android啟動之生命周期流程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!