怎么制作网站开发设计,百度网盘在线登录入口,域名注册商怎么查,石家庄百度推广官网SystemServer进程在android系统中占了举足轻重的地位#xff0c;系统的所有服务和SystemUI都是由它启动。
一、SystemServer进程主函数流程
1、主函数三部曲
//frameworks/base/services/java/com/android/server/SystemServer.java /** * The main entry point from zy…SystemServer进程在android系统中占了举足轻重的地位系统的所有服务和SystemUI都是由它启动。
一、SystemServer进程主函数流程
1、主函数三部曲
//frameworks/base/services/java/com/android/server/SystemServer.java /** * The main entry point from zygote. */public static void main(String[] args) {new SystemServer().run();}
SystemServer的入口函数同样是main调用顺序先是构造函数再是run构造函数没有什么重点地方后文dump详细介绍主要流程主要还是run方法。run里面哦流程其实还是遵循普遍的三部曲初始化上下文-启动服务-进入loop循环
1初始化上下文
//frameworks/base/services/java/com/android/server/SystemServer.java private void run() {TimingsTraceAndSlog t new TimingsTraceAndSlog();try {t.traceBegin(InitBeforeStartServices);//.....一些属性的初始化....// The system server should never make non-oneway callsBinder.setWarnOnBlocking(true);// The system server should always load safe labelsPackageItemInfo.forceSafeLabels();// Default to FULL within the system server.SQLiteGlobal.sDefaultSyncMode SQLiteGlobal.SYNC_MODE_FULL;// Deactivate SQLiteCompatibilityWalFlags until settings provider is initializedSQLiteCompatibilityWalFlags.init(null);// Here we go! Slog.i(TAG, Entered the Android system server!);final long uptimeMillis SystemClock.elapsedRealtime(); //记录开始启动的时间错调试系统启动时间的时候需要关注// Mmmmmm... more memory!VMRuntime.getRuntime().clearGrowthLimit();// Some devices rely on runtime fingerprint generation, so make sure weve defined it before booting further.Build.ensureFingerprintProperty();// Within the system server, it is an error to access Environment paths without explicitly specifying a user.Environment.setUserRequired(true);// Within the system server, any incoming Bundles should be defused to avoid throwing BadParcelableException.BaseBundle.setShouldDefuse(true);// Within the system server, when parceling exceptions, include the stack traceParcel.setStackTraceParceling(true);// Ensure binder calls into the system always run at foreground priority.BinderInternal.disableBackgroundScheduling(true);// Increase the number of binder threads in system_serverBinderInternal.setMaxThreads(sMaxBinderThreads);// Prepare the main looper thread (this thread). android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_FOREGROUND);android.os.Process.setCanSelfBackground(false);Looper.prepareMainLooper();Looper.getMainLooper().setSlowLogThresholdMs(SLOW_DISPATCH_THRESHOLD_MS, SLOW_DELIVERY_THRESHOLD_MS);SystemServiceRegistry.sEnableServiceNotFoundWtf true;// Initialize native services.System.loadLibrary(android_servers);// Allow heap / perf profiling.initZygoteChildHeapProfiling();// Check whether we failed to shut down last time we tried. This call may not return.performPendingShutdown();// Initialize the system context.createSystemContext();// Call per-process mainline module initialization.ActivityThread.initializeMainlineModules();} finally {t.traceEnd(); // InitBeforeStartServices}
2启动系统所有服务
//frameworks/base/services/java/com/android/server/SystemServer.java // Start services.try {t.traceBegin(StartServices);startBootstrapServices(t); //启动BOOT服务即没有这些服务系统无法运行startCoreServices(t); //启动核心服务startOtherServices(t); //启动其他服务startApexServices(t); //启动APEX服务此服务必现要在前面的所有服务启动之后才能启动为了防止OTA相关问题// Only update the timeout after starting all the services so that we use// the default timeout to start system server.updateWatchdogTimeout(t);} catch (Throwable ex) {Slog.e(System, ******************************************);Slog.e(System, ************ Failure starting system services, ex);throw ex;} finally {t.traceEnd(); // StartServices}/*** Starts system services defined in apexes.* pApex services must be the last category of services to start. No other service must be* starting after this point. This is to prevent unnecessary stability issues when these apexes* are updated outside of OTA; and to avoid breaking dependencies from system into apexes.*/private void startApexServices(NonNull TimingsTraceAndSlog t) {t.traceBegin(startApexServices);// TODO(b/192880996): get the list from android package, once the manifest entries are migrated to system manifest.ListApexSystemServiceInfo services ApexManager.getInstance().getApexSystemServices();for (ApexSystemServiceInfo info : services) {String name info.getName();String jarPath info.getJarPath();t.traceBegin(starting name);if (TextUtils.isEmpty(jarPath)) {mSystemServiceManager.startService(name);} else {mSystemServiceManager.startServiceFromJar(name, jarPath);}t.traceEnd();}// make sure no other services are started after this pointmSystemServiceManager.sealStartedServices();t.traceEnd(); // startApexServices}
如上代码大体启动了四类服务
startBootstrapServices启动一些关键引导服务这些服务耦合到一起startCoreServices启动一些关键引导服务这些服务没有耦合到一起startOtherServices启动其他一些杂七杂八的服务startApexServices启动apex类的服务其实就是mainline那些东西详情参考请点击我
3进入loop循环
//frameworks/base/services/java/com/android/server/SystemServer.javaStrictMode.initVmDefaults(null);if (!mRuntimeRestart !isFirstBootOrUpgrade()) {final long uptimeMillis SystemClock.elapsedRealtime();final long maxUptimeMillis 60 * 1000;if (uptimeMillis maxUptimeMillis) {Slog.wtf(SYSTEM_SERVER_TIMING_TAG, SystemServer init took too long. uptimeMillis uptimeMillis);}}// Loop forever.Looper.loop();throw new RuntimeException(Main thread loop unexpectedly exited);
和之前讲的binder一样基本上所有的进程最后都会进入loop进行循环轮询主线程相关的handle消息和binder消息如下日志堆栈表示handle消息处理过程中发生异常 2、顺序启动服务 二、SystemServer正常启动日志
1、SystemServerTiming日志封装
2、SystemServer启动阶段OnBootPhase
3、SystemServer无法找到服务
4、Slow operation
三、SystemServer dumpsys解读
1、SystemServer的dump
2、其他服务的dump
SystemServer:Runtime restart: falseStart count: 1Runtime start-up time: 8s0msRuntime start-elapsed time: 8s0msSystemServiceManager:Current phase: 1000Current user not set!1 target users: 0(full)172 started services:com.transsion.hubcore.server.TranBootstrapServiceManagerServicecom.android.server.security.FileIntegrityServicecom.android.server.pm.Installercom.android.server.os.DeviceIdentifiersPolicyServicecom.android.server.uri.UriGrantsManagerService.Lifecyclecom.android.server.powerstats.PowerStatsServicecom.android.server.permission.access.AccessCheckingServicecom.android.server.wm.ActivityTaskManagerService.Lifecyclecom.android.server.am.ActivityManagerService.Lifecycle......com.android.server.Watchdog:WatchdogTimeoutMillis60000SystemServerInitThreadPool:has instance: falsenumber of threads: 8service: java.util.concurrent.ThreadPoolExecutor7bf04fb[Terminated, pool size 0, active threads 0, queued tasks 0, completed tasks 351]is shutdown: trueno pending tasksAdServices:mAdServicesModuleName: com.google.android.adservicesmAdServicesModuleVersion: 341131050mHandlerThread: Thread[AdServicesManagerServiceHandler,5,main]mAdServicesPackagesRolledBackFrom: {}mAdServicesPackagesRolledBackTo: {}ShellCmd enabled: falseUserInstanceManagermAdServicesBaseDir: /data/system/adservicesmConsentManagerMapLocked: {}mAppConsentManagerMapLocked: {}mRollbackHandlingManagerMapLocked: {}mBlockedTopicsManagerMapLocked{}TopicsDbHelperCURRENT_DATABASE_VERSION: 1mDbFile: /data/system/adservices_topics.dbmDbVersion: 1