安卓SystemServer进程详解

news2024/10/7 8:22:24

目录

  • 一、概述
  • 二、源码分析
    • 2.1 SystemServer fork流程分析
      • 2.1.1 [ZygoteInit.java] main()
      • 2.1.2 [ZygoteInit.java] forkSystemServer()
      • 2.1.3 [Zygote.java] forkSystemServer()
      • 2.1.4 [com_android_internal_os_Zygote.cpp]
      • 2.1.5 [com_android_internal_os_Zygote.cpp] ForkCommon
      • 2.1.6 [Zygcom_android_internal_os_Zygoteote.cpp] SpecializeCommon
      • 2.1.7 [ZygoteInit.java] handleSystemServerProcess
      • 2.1.8 [ZygoteInit.java] zygoteInit
      • 2.1.9 [RuntimeInit.java] commonInit
      • 2.1.10 [ZygoteInit.java] nativeZygoteInit
      • 2.1.11 [RuntimeInit.java] applicationInit
      • 2.1.12 [RuntimeInit.java] findStaticMain
      • 2.1.13 [RuntimeInit.java] MethodAndArgsCaller
    • 2.2 SystemServer 启动后的流程
      • 2.2.1 [SystemServer.java] main
      • 2.2.2 [SystemServer.java] run
      • 2.2.3 [SystemServer.java] performPendingShutdown
      • 2.2.4 [SystemServer.java] createSystemContext
      • 2.2.5 [SystemServer.java] startBootstrapServices
      • 2.2.6 [SystemServer.java] startCoreServices
      • 2.2.7 [SystemServer.java] startOtherServices
  • 三、服务启动分析
    • 3.1 PHASE 0
    • 3.2 PHASE 100 (阶段100):
    • 3.3 PHASE 480 (阶段480):
    • 3.4 PHASE 500 (阶段500):
    • 3.5 PHASE 520 (阶段520):
    • 3.6 PHASE 550 (阶段550):
    • 3.7 PHASE 600 (阶段600):
    • 3.8 PHASE 1000 (阶段1000):
  • 四、服务分类
  • 五、总结
  • 六、相关日志


一、概述

Zygote是所有应用的鼻祖。SystemServer和其他所有Dalivik虚拟机进程都是由Zygote fork而来。Zygote fork的第一个进程就是SystemServer,其在手机中的进程名为 system_server

trinket:/ # ps -A |grep system_server
system        1504   591 7842576 231380 SyS_epoll_wait      0 S system_server

system_server 进程承载着整个framework的核心服务,例如创建 ActivityManagerService、PowerManagerService、DisplayManagerService、PackageManagerService、WindowManagerService、LauncherAppsService等80多个核心系统服务。这些服务以不同的线程方式存在于system_server这个进程中。

接下来,透过Android系统源码一起来分析一下SystemServer的整个启动过程。

核心源码

/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
/frameworks/base/core/java/com/android/internal/os/RuntimeInit.java
/frameworks/base/core/java/com/android/internal/os/Zygote.java
/frameworks/base/services/java/com/android/server/SystemServer.java
/frameworks/base/services/core/java/com/android/serverSystemServiceManager.java
/frameworks/base/services/core/java/com/android/ServiceThread.java
/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
/frameworks/base/core/java/android/app/ActivityThread.java
/frameworks/base/core/java/android/app/LoadedApk.java
/frameworks/base/core/java/android/app/ContextImpl.java
/frameworks/base/core/jni/AndroidRuntime.cpp
/frameworks/base/core/jni/com_android_internal_os_ZygoteInit.cpp
/frameworks/base/cmds/app_process/app_main.cpp


二、源码分析

2.1 SystemServer fork流程分析

2.1.1 [ZygoteInit.java] main()

说明:Zygote进程,通过fork()函数,最终孵化出system_server的进程,通过反射的方法启动SystemServer.java的main()方法

源码:

public static void main(String argv[]) {
	ZygoteServer zygoteServer = null;
    ...
	try {
		zygoteServer = new ZygoteServer(isPrimaryZygote);
		if (startSystemServer) {
			//fork system_server
			Runnable r = forkSystemServer(abiList, zygoteSocketName, zygoteServer);

			// {@code r == null} in the parent (zygote) process, and {@code r != null} in the
			// child (system_server) process.
			if (r != null) {
				r.run(); //启动SystemServer.java的main()
				return; //Android 8.0之前是通过抛异常的方式来启动,这里是直接return出去,用来清空栈,提高栈帧利用率
			}
		}
        caller = zygoteServer.runSelectLoop(abiList);
    } catch (Throwable ex) {
        Log.e(TAG, "System zygote died with exception", ex);
        throw ex;
    } finally {
        if (zygoteServer != null) {
            zygoteServer.closeServerSocket();
        }
    }
	if (caller != null) {
        caller.run();
    }
	...
}

2.1.2 [ZygoteInit.java] forkSystemServer()

说明:准备参数,用来进行system_server的fork,从参数可知,pid=1000,gid=1000,进程名nick-name=system_server
当有两个Zygote进程时,需要等待第二个Zygote创建完成。由于fork时会拷贝socket,因此,在fork出system_server进程后,
需要关闭Zygote原有的socket

源码:

private static Runnable forkSystemServer(String abiList, String socketName,
        ZygoteServer zygoteServer) {
    ......
    //参数准备,uid和gid都是为1000
    String args[] = {
            "--setuid=1000",
            "--setgid=1000",
            "--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1021,1023,"
                    + "1024,1032,1065,3001,3002,3003,3006,3007,3009,3010",
            "--capabilities=" + capabilities + "," + capabilities,
            "--nice-name=system_server",
            "--runtime-args",
            "--target-sdk-version=" + VMRuntime.SDK_VERSION_CUR_DEVELOPMENT,
            "com.android.server.SystemServer",
    };
    ZygoteArguments parsedArgs = null;
    int pid;
    try {
        //将上面准备的参数,按照ZygoteArguments的风格进行封装
        parsedArgs = new ZygoteArguments(args);
        Zygote.applyDebuggerSystemProperty(parsedArgs);
        Zygote.applyInvokeWithSystemProperty(parsedArgs);

        //通过fork"分裂"出子进程system_server
        /* Request to fork the system server process */
        pid = Zygote.forkSystemServer(
                parsedArgs.mUid, parsedArgs.mGid,
                parsedArgs.mGids,
                parsedArgs.mRuntimeFlags,
                null,
                parsedArgs.mPermittedCapabilities,
                parsedArgs.mEffectiveCapabilities);
    } catch (IllegalArgumentException ex) {
        throw new RuntimeException(ex);
    }

    //进入子进程system_server
    if (pid == 0) {
        // 处理32_64和64_32的情况
        if (hasSecondZygote(abiList)) {
            waitForSecondaryZygote(socketName);  //需要等待第二个Zygote创建完成
        }

        // fork时会copy socket,Zygote原有的socket需要关闭
        zygoteServer.closeServerSocket();
        // system server进程处理自己的工作
        return handleSystemServerProcess(parsedArgs);
    }
    return null;
}

2.1.3 [Zygote.java] forkSystemServer()

说明:这里的nativeForkSystemServer()最终是通过JNI,调用Nativate C空间的com_android_internal_os_Zygote_nativeForkSystemServer()来fork system_server

源码:

public static int forkSystemServer(int uid, int gid, int[] gids, int runtimeFlags,
        int[][] rlimits, long permittedCapabilities, long effectiveCapabilities) {
    ZygoteHooks.preFork();
    // Resets nice priority for zygote process.
    resetNicePriority();
    //调用native的方法来fork system_server
    //最终调用native的方法:com_android_internal_os_Zygote_nativeForkSystemServer
    int pid = nativeForkSystemServer(
            uid, gid, gids, runtimeFlags, rlimits,
            permittedCapabilities, effectiveCapabilities);
    // Enable tracing as soon as we enter the system_server.
    if (pid == 0) {
        Trace.setTracingEnabled(true, runtimeFlags);
    }
    ZygoteHooks.postForkCommon();
    return pid;
}

[com_android_internal_os_Zygote.cpp]
说明:JNI注册的映射关系

static const JNINativeMethod gMethods[] = {
    { "nativeForkSystemServer", "(II[II[[IJJ)I",
      (void *) com_android_internal_os_Zygote_nativeForkSystemServer },
}

2.1.4 [com_android_internal_os_Zygote.cpp]

com_android_internal_os_Zygote_nativeForkSystemServer()

说明:通过 SpecializeCommon进行fork,pid返回0时,表示当前为system_server子进程
当pid >0 时,是进入父进程,即Zygote进程,通过waitpid 的WNOHANG 非阻塞方式来监控
system_server进程挂掉,如果挂掉后重启Zygote进程。
现在使用的Android系统大部分情况下是64位的,会存在两个Zygote,当system_server挂掉后,只启动Zygote64这个父进程

|trinket:/ # ps -A |grep zygote
root           591     1 5421464 170432 poll_schedule_timeout 0 S zygote64
root           592     1 1734388 153892 poll_schedule_timeout 0 S zygote
webview_zygote 2213  592 1739824  57280 poll_schedule_timeout 0 S webview_zygote

源码:

static jint com_android_internal_os_Zygote_nativeForkSystemServer(
        JNIEnv* env, jclass, uid_t uid, gid_t gid, jintArray gids,
        jint runtime_flags, jobjectArray rlimits, jlong permitted_capabilities,
        jlong effective_capabilities) {


  pid_t pid = ForkCommon(env, true,
                         fds_to_close,
                         fds_to_ignore);
  if (pid == 0) {
      //进入子进程
      SpecializeCommon(env, uid, gid, gids, runtime_flags, rlimits,
                       permitted_capabilities, effective_capabilities,
                       MOUNT_EXTERNAL_DEFAULT, nullptr, nullptr, true,
                       false, nullptr, nullptr);
  } else if (pid > 0) {
      //进入父进程,即zygote进程
      ALOGI("System server process %d has been created", pid);

      int status;
	  //用waitpid函数获取状态发生变化的子进程pid
	  //waitpid的标记为WNOHANG,即非阻塞,返回为正值就说明有进程挂掉了
      if (waitpid(pid, &status, WNOHANG) == pid) {
		  //当system_server进程死亡后,重启zygote进程
          ALOGE("System server process %d has died. Restarting Zygote!", pid);
          RuntimeAbort(env, __LINE__, "System server process has died. Restarting Zygote!");
      }
	  ...
  }
  return pid;
}

2.1.5 [com_android_internal_os_Zygote.cpp] ForkCommon

说明:从Zygote孵化出一个进程的使用程序

源码:

static pid_t ForkCommon(JNIEnv* env, bool is_system_server,
                        const std::vector<int>& fds_to_close,
                        const std::vector<int>& fds_to_ignore) {
  //设置子进程的signal
  SetSignalHandlers();

  //在fork的过程中,临时锁住SIGCHLD
  BlockSignal(SIGCHLD, fail_fn);

  //fork子进程,采用copy on write方式,这里执行一次,会返回两次
  //pid=0 表示Zygote  fork SystemServer这个子进程成功
  //pid > 0 表示SystemServer 的真正的PID
  pid_t pid = fork();

  if (pid == 0) {
     //进入子进程
    // The child process.
    PreApplicationInit();

    // 关闭并清除文件描述符
    // Clean up any descriptors which must be closed immediately
    DetachDescriptors(env, fds_to_close, fail_fn);
	...
  } else {
    ALOGD("Forked child process %d", pid);
  }

  //fork结束,解锁
  UnblockSignal(SIGCHLD, fail_fn);

  return pid;
}

2.1.6 [Zygcom_android_internal_os_Zygoteote.cpp] SpecializeCommon

说明:system_server进程的一些调度配置

源码:

static void SpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArray gids,
                             jint runtime_flags, jobjectArray rlimits,
                             jlong permitted_capabilities, jlong effective_capabilities,
                             jint mount_external, jstring managed_se_info,
                             jstring managed_nice_name, bool is_system_server,
                             bool is_child_zygote, jstring managed_instruction_set,
                             jstring managed_app_data_dir) {
  ...
  bool use_native_bridge = !is_system_server &&
                           instruction_set.has_value() &&
                           android::NativeBridgeAvailable() &&
                           android::NeedsNativeBridge(instruction_set.value().c_str());

  if (!is_system_server && getuid() == 0) {
    //对于非system_server子进程,则创建进程组
    const int rc = createProcessGroup(uid, getpid());
    if (rc == -EROFS) {
      ALOGW("createProcessGroup failed, kernel missing CONFIG_CGROUP_CPUACCT?");
    } else if (rc != 0) {
      ALOGE("createProcessGroup(%d, %d) failed: %s", uid, /* pid= */ 0, strerror(-rc));
    }
  }

  SetGids(env, gids, fail_fn);  //设置设置group
  SetRLimits(env, rlimits, fail_fn); //设置资源limit

  if (use_native_bridge) {
    // Due to the logic behind use_native_bridge we know that both app_data_dir
    // and instruction_set contain values.
    android::PreInitializeNativeBridge(app_data_dir.value().c_str(),
                                       instruction_set.value().c_str());
  }

  if (setresgid(gid, gid, gid) == -1) {
    fail_fn(CREATE_ERROR("setresgid(%d) failed: %s", gid, strerror(errno)));
  }
   ...
   //selinux上下文
  if (selinux_android_setcontext(uid, is_system_server, se_info_ptr, nice_name_ptr) == -1) {
    fail_fn(CREATE_ERROR("selinux_android_setcontext(%d, %d, \"%s\", \"%s\") failed",
                         uid, is_system_server, se_info_ptr, nice_name_ptr));
  }

  //设置线程名为system_server,方便调试
  if (nice_name.has_value()) {
    SetThreadName(nice_name.value());
  } else if (is_system_server) {
    SetThreadName("system_server");
  }

  // Unset the SIGCHLD handler, but keep ignoring SIGHUP (rationale in SetSignalHandlers).
  //设置子进程的signal信号处理函数为默认函数
  UnsetChldSignalHandler();

  if (is_system_server) {
   
    //对应  Zygote.java 的callPostForkSystemServerHooks()
    env->CallStaticVoidMethod(gZygoteClass, gCallPostForkSystemServerHooks);
    if (env->ExceptionCheck()) {
      fail_fn("Error calling post fork system server hooks.");
    }

	//对应ZygoteInit.java 的 createSystemServerClassLoader()
	//预取系统服务器的类加载器。这样做是为了尽早地绑定适当的系统服务器selinux域。
    env->CallStaticVoidMethod(gZygoteInitClass, gCreateSystemServerClassLoader);
    if (env->ExceptionCheck()) {
      // Be robust here. The Java code will attempt to create the classloader
      // at a later point (but may not have rights to use AoT artifacts).
      env->ExceptionClear();
    }
	...
  }

   //等价于调用zygote.java 的callPostForkChildHooks()
  env->CallStaticVoidMethod(gZygoteClass, gCallPostForkChildHooks, runtime_flags,
                            is_system_server, is_child_zygote, managed_instruction_set);

  if (env->ExceptionCheck()) {
    fail_fn("Error calling post fork hooks.");
  }
}

2.1.7 [ZygoteInit.java] handleSystemServerProcess

说明:创建类加载器,并赋予当前线程,其中环境变量SYSTEMSERVERCLASSPATH,主要是service.jar、ethernet-service.jar和wifi-service.jar这三个jar包

export SYSTEMSERVERCLASSPATH=/system/framework/services.jar:/system/framework/ethernet-service.jar:/system/framework/wifi-service.jar
源码:

private static Runnable handleSystemServerProcess(ZygoteArguments parsedArgs) {

    if (parsedArgs.mNiceName != null) {
        Process.setArgV0(parsedArgs.mNiceName); //设置当前进程名为"system_server"
    }

    final String systemServerClasspath = Os.getenv("SYSTEMSERVERCLASSPATH");
    if (systemServerClasspath != null) {
       //执行dex优化操作
        if (performSystemServerDexOpt(systemServerClasspath)) {
            sCachedSystemServerClassLoader = null;
        }
		...
    }

    if (parsedArgs.mInvokeWith != null) {
        String[] args = parsedArgs.mRemainingArgs;
		//如果我们有一个非空系统服务器类路径,我们将不得不复制现有的参数并将类路径附加到它。
		//当我们执行一个新进程时,ART将正确地处理类路径。
        if (systemServerClasspath != null) {
            String[] amendedArgs = new String[args.length + 2];
            amendedArgs[0] = "-cp";
            amendedArgs[1] = systemServerClasspath;
            System.arraycopy(args, 0, amendedArgs, 2, args.length);
            args = amendedArgs;
        }

        //启动应用进程
        WrapperInit.execApplication(parsedArgs.mInvokeWith,
                parsedArgs.mNiceName, parsedArgs.mTargetSdkVersion,
                VMRuntime.getCurrentInstructionSet(), null, args);

        throw new IllegalStateException("Unexpected return from WrapperInit.execApplication");
    } else {
        // 创建类加载器,并赋予当前线程
        createSystemServerClassLoader();
        ClassLoader cl = sCachedSystemServerClassLoader;
        if (cl != null) {
            Thread.currentThread().setContextClassLoader(cl);
        }

        //system_server进入此分支
        return ZygoteInit.zygoteInit(parsedArgs.mTargetSdkVersion,
                parsedArgs.mRemainingArgs, cl);
    }
}

2.1.8 [ZygoteInit.java] zygoteInit

说明:基础配置,并进行应用初始化,返回对象

源码:

public static final Runnable zygoteInit(int targetSdkVersion, String[] argv,
        ClassLoader classLoader) {

    Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "ZygoteInit");
    RuntimeInit.redirectLogStreams();  //重定向log输出

    RuntimeInit.commonInit(); //通用的一些初始化
    ZygoteInit.nativeZygoteInit(); // zygote初始化
    // 应用初始化
    return RuntimeInit.applicationInit(targetSdkVersion, argv, classLoader);
}

2.1.9 [RuntimeInit.java] commonInit

说明:配置log、时区、http userAgent等基础信息

源码:

protected static final void commonInit() {
	LoggingHandler loggingHandler = new LoggingHandler();
    
    // 设置默认的未捕捉异常处理方法
    RuntimeHooks.setUncaughtExceptionPreHandler(loggingHandler);
    Thread.setDefaultUncaughtExceptionHandler(new KillApplicationHandler(loggingHandler));

    // 设置时区,通过属性读出中国时区为"Asia/Shanghai"
    RuntimeHooks.setTimeZoneIdSupplier(() -> SystemProperties.get("persist.sys.timezone"));

    //重置log配置
    LogManager.getLogManager().reset();
    new AndroidConfig();

    //设置默认的HTTP User-agent格式,用于 HttpURLConnection
    String userAgent = getDefaultUserAgent();
    System.setProperty("http.agent", userAgent);

    /*
     * Wire socket tagging to traffic stats.
     */
    //设置socket的tag,用于网络流量统计
    NetworkManagementSocketTagger.install();
	...
}

2.1.10 [ZygoteInit.java] nativeZygoteInit

说明:nativeZygoteInit 通过反射,进入com_android_internal_os_ZygoteInit_nativeZygoteInit

源码:[AndroidRuntime.cpp]

int register_com_android_internal_os_ZygoteInit_nativeZygoteInit(JNIEnv* env)
{
    const JNINativeMethod methods[] = {
        { "nativeZygoteInit", "()V",
            (void*) com_android_internal_os_ZygoteInit_nativeZygoteInit },
    };
    return jniRegisterNativeMethods(env, "com/android/internal/os/ZygoteInit",
        methods, NELEM(methods));
}

gCurRuntime = this;
static void com_android_internal_os_ZygoteInit_nativeZygoteInit(JNIEnv* env, jobject clazz)
{
    //此处的gCurRuntime为AppRuntime,是在AndroidRuntime.cpp中定义的
    gCurRuntime->onZygoteInit();
}

[app_main.cpp]
virtual void onZygoteInit()
{
    sp<ProcessState> proc = ProcessState::self();
    ALOGV("App process: starting thread pool.\n");
    proc->startThreadPool(); //启动新binder线程
}

2.1.11 [RuntimeInit.java] applicationInit

说明:通过参数解析,得到args.startClass = com.android.server.SystemServer

源码:

protected static Runnable applicationInit(int targetSdkVersion, String[] argv,
        ClassLoader classLoader) {

    //true代表应用程序退出时不调用AppRuntime.onExit(),否则会在退出前调用
    nativeSetExitWithoutCleanup(true);

    // We want to be fairly aggressive about heap utilization, to avoid
    // holding on to a lot of memory that isn't needed.
    
    //设置虚拟机的内存利用率参数值为0.75
    VMRuntime.getRuntime().setTargetHeapUtilization(0.75f);
    VMRuntime.getRuntime().setTargetSdkVersion(targetSdkVersion);

    final Arguments args = new Arguments(argv);  //解析参数
	...
    // Remaining arguments are passed to the start class's static main
    //调用startClass的static方法 main() 
    return findStaticMain(args.startClass, args.startArgs, classLoader);
}

2.1.12 [RuntimeInit.java] findStaticMain

说明:拿到SystemServer的main()方法,并返回 MethodAndArgsCaller()对象

源码:

protected static Runnable findStaticMain(String className, String[] argv,
        ClassLoader classLoader) {
    Class<?> cl;

    try {
		//拿到com.android.server.SystemServer 的类对象
        cl = Class.forName(className, true, classLoader);
    } catch (ClassNotFoundException ex) {
        throw new RuntimeException(
                "Missing class when invoking static main " + className,
                ex);
    }

    Method m;
    try {
        //得到SystemServer的main()方法,
        m = cl.getMethod("main", new Class[] { String[].class });
    } catch (NoSuchMethodException ex) {
        throw new RuntimeException(
                "Missing static main on " + className, ex);
    } catch (SecurityException ex) {
        throw new RuntimeException(
                "Problem getting static main on " + className, ex);
    }

    int modifiers = m.getModifiers();
    if (! (Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers))) {
        throw new RuntimeException(
                "Main method is not public and static on " + className);
    }

    //把MethodAndArgsCaller的对象返回给ZygoteInit.main()。这样做好处是能清空栈帧,提高栈帧利用率
	//清除了设置进程所需的所有堆栈帧
    return new MethodAndArgsCaller(m, argv);
}

2.1.13 [RuntimeInit.java] MethodAndArgsCaller

说明:最终在ZygoteInit.java的main(),调用这里的run()来启动SystemServer.java的main(),真正进入SystemServer进程

源码:

static class MethodAndArgsCaller implements Runnable {
    /** method to call */
    private final Method mMethod;

    /** argument array */
    private final String[] mArgs;

    public MethodAndArgsCaller(Method method, String[] args) {
        mMethod = method;
        mArgs = args;
    }

    public void run() {
        try {
          //根据传递过来的参数,可知此处通过反射机制调用的是SystemServer.main()方法
            mMethod.invoke(null, new Object[] { mArgs });
        } catch (IllegalAccessException ex) {
            throw new RuntimeException(ex);
        } catch (InvocationTargetException ex) {
            Throwable cause = ex.getCause();
            if (cause instanceof RuntimeException) {
                throw (RuntimeException) cause;
            } else if (cause instanceof Error) {
                throw (Error) cause;
            }
            throw new RuntimeException(ex);
        }
    }
}

2.2 SystemServer 启动后的流程

2.2.1 [SystemServer.java] main

说明:main函数由Zygote进程 fork后运行,作用是new 一个SystemServer对象,再调用该对象的run()方法

源码:

public static void main(String[] args) {
    //new 一个SystemServer对象,再调用该对象的run()方法
    new SystemServer().run();
}

2.2.2 [SystemServer.java] run

说明:先初始化一些系统变量,加载类库,创建Context对象,创建SystemServiceManager对象等候再启动服务,启动引导服务、核心服务和其他服务
源码:

private void run() {
    try {
        traceBeginAndSlog("InitBeforeStartServices");

        // Record the process start information in sys props.
        //从属性中读取system_server进程的一些信息
        SystemProperties.set(SYSPROP_START_COUNT, String.valueOf(mStartCount));
        SystemProperties.set(SYSPROP_START_ELAPSED, String.valueOf(mRuntimeStartElapsedTime));
        SystemProperties.set(SYSPROP_START_UPTIME, String.valueOf(mRuntimeStartUptime));

        EventLog.writeEvent(EventLogTags.SYSTEM_SERVER_START,
                mStartCount, mRuntimeStartUptime, mRuntimeStartElapsedTime);


        //如果一个设备的时钟是在1970年之前(0年之前),
        //那么很多api 都会因为处理负数而崩溃,尤其是java.io.File#setLastModified
        //我把把时间设置为1970
        if (System.currentTimeMillis() < EARLIEST_SUPPORTED_TIME) {
            Slog.w(TAG, "System clock is before 1970; setting to 1970.");
            SystemClock.setCurrentTimeMillis(EARLIEST_SUPPORTED_TIME);
        }

        //如果时区不存在,设置时区为GMT
        String timezoneProperty = SystemProperties.get("persist.sys.timezone");
        if (timezoneProperty == null || timezoneProperty.isEmpty()) {
            Slog.w(TAG, "Timezone not set; setting to GMT.");
            SystemProperties.set("persist.sys.timezone", "GMT");
        }

        //变更虚拟机的库文件,对于Android 10.0默认采用的是libart.so
        SystemProperties.set("persist.sys.dalvik.vm.lib.2", VMRuntime.getRuntime().vmLibrary());

        // Mmmmmm... more memory!
        //清除vm内存增长上限,由于启动过程需要较多的虚拟机内存空间
        VMRuntime.getRuntime().clearGrowthLimit();
		...
        //系统服务器必须一直运行,所以它需要尽可能高效地使用内存
        //设置内存的可能有效使用率为0.8
        VMRuntime.getRuntime().setTargetHeapUtilization(0.8f);


        //一些设备依赖于运行时指纹生成,所以在进一步启动之前,请确保我们已经定义了它。
        Build.ensureFingerprintProperty();

        //访问环境变量前,需要明确地指定用户
        //在system_server中,任何传入的包都应该被解除,以避免抛出BadParcelableException。
        BaseBundle.setShouldDefuse(true);

        //在system_server中,当打包异常时,信息需要包含堆栈跟踪
        Parcel.setStackTraceParceling(true);

        //确保当前系统进程的binder调用,总是运行在前台优先级(foreground priority)
        BinderInternal.disableBackgroundScheduling(true);

        //设置system_server中binder线程的最大数量,最大值为31
        BinderInternal.setMaxThreads(sMaxBinderThreads);

        //准备主线程lopper,即在当前线程运行
        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);

        //加载android_servers.so库,初始化native service
        System.loadLibrary("android_servers");

        // Debug builds - allow heap profiling.
        //如果是Debug版本,允许堆内存分析
        if (Build.IS_DEBUGGABLE) {
            initZygoteChildHeapProfiling();
        }

        //检测上次关机过程是否失败,这个调用可能不会返回
        performPendingShutdown();

        //初始化系统上下文
        createSystemContext();

        //创建系统服务管理--SystemServiceManager
        mSystemServiceManager = new SystemServiceManager(mSystemContext);
        mSystemServiceManager.setStartInfo(mRuntimeRestart,
                mRuntimeStartElapsedTime, mRuntimeStartUptime);
        //将mSystemServiceManager添加到本地服务的成员sLocalServiceObjects
        LocalServices.addService(SystemServiceManager.class, mSystemServiceManager);
        // Prepare the thread pool for init tasks that can be parallelized
        //为可以并行化的init任务准备线程池
        SystemServerInitThreadPool.get();
    } finally {
        traceEnd();  // InitBeforeStartServices
    }

    // Start services.
    //启动服务
    try {
        traceBeginAndSlog("StartServices");
        startBootstrapServices();   // 启动引导服务
        startCoreServices();        // 启动核心服务
        startOtherServices();       // 启动其他服务
        SystemServerInitThreadPool.shutdown(); //停止线程池
    } catch (Throwable ex) {
        Slog.e("System", "******************************************");
        Slog.e("System", "************ Failure starting system services", ex);
        throw ex;
    } finally {
        traceEnd();
    }

    //为当前的虚拟机初始化VmPolicy
    StrictMode.initVmDefaults(null);
	...
    // Loop forever.
    //死循环执行
    Looper.loop();
    throw new RuntimeException("Main thread loop unexpectedly exited");
}

2.2.3 [SystemServer.java] performPendingShutdown

说明:检测上次关机过程是否失败,这个调用可能不会返回

源码:

private void performPendingShutdown() {
    final String shutdownAction = SystemProperties.get(
            ShutdownThread.SHUTDOWN_ACTION_PROPERTY, "");
    if (shutdownAction != null && shutdownAction.length() > 0) {
        boolean reboot = (shutdownAction.charAt(0) == '1');

        final String reason;
        if (shutdownAction.length() > 1) {
            reason = shutdownAction.substring(1, shutdownAction.length());
        } else {
            reason = null;
        }

        //如果需要重新启动才能应用更新,一定要确保uncrypt在需要时正确执行。
        //如果'/cache/recovery/block.map'还没有创建,停止重新启动,它肯定会失败,
        //并有机会捕获一个bugreport时,这仍然是可行的。
        if (reason != null && reason.startsWith(PowerManager.REBOOT_RECOVERY_UPDATE)) {
            File packageFile = new File(UNCRYPT_PACKAGE_FILE);
            if (packageFile.exists()) {
                String filename = null;
                try {
                    filename = FileUtils.readTextFile(packageFile, 0, null);
                } catch (IOException e) {
                    Slog.e(TAG, "Error reading uncrypt package file", e);
                }

                if (filename != null && filename.startsWith("/data")) {
                    if (!new File(BLOCK_MAP_FILE).exists()) {
                        Slog.e(TAG, "Can't find block map file, uncrypt failed or " +
                                "unexpected runtime restart?");
                        return;
                    }
                }
            }
        }
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                synchronized (this) {
                    //当属性sys.shutdown.requested的值为1时,会重启
                    //当属性的值不为空,且不为1时,会关机
                    ShutdownThread.rebootOrShutdown(null, reboot, reason);
                }
            }
        };

        // ShutdownThread must run on a looper capable of displaying the UI.
        //ShutdownThread必须在一个能够显示UI的looper上运行
        //即UI线程启动ShutdownThread的rebootOrShutdown
        Message msg = Message.obtain(UiThread.getHandler(), runnable);
        msg.setAsynchronous(true);
        UiThread.getHandler().sendMessage(msg);

    }
}

2.2.4 [SystemServer.java] createSystemContext

说明:初始化系统上下文, 该过程会创建对象有ActivityThread,Instrumentation, ContextImpl,LoadedApk,Application

源码:

private void createSystemContext() {
    //创建system_server进程的上下文信息
    ActivityThread activityThread = ActivityThread.systemMain();
    mSystemContext = activityThread.getSystemContext();
    //设置主题
    mSystemContext.setTheme(DEFAULT_SYSTEM_THEME);

    //获取systemui上下文信息,并设置主题
    final Context systemUiContext = activityThread.getSystemUiContext();
    systemUiContext.setTheme(DEFAULT_SYSTEM_THEME);
}

2.2.5 [SystemServer.java] startBootstrapServices

说明:用于启动系统Boot级服务,有ActivityManagerService, PowerManagerService, LightsService, DisplayManagerService, PackageManagerService, UserManagerService, sensor服务.

源码:

private void startBootstrapServices() {
    traceBeginAndSlog("StartWatchdog");
    //启动watchdog
    //尽早启动watchdog,如果在早起启动时发生死锁,我们可以让system_server
    //崩溃,从而进行详细分析
    final Watchdog watchdog = Watchdog.getInstance();
    watchdog.start();
    traceEnd();

...
    //添加PLATFORM_COMPAT_SERVICE,Platform compat服务被ActivityManagerService、PackageManagerService
    //以及将来可能出现的其他服务使用。
    traceBeginAndSlog("PlatformCompat");
    ServiceManager.addService(Context.PLATFORM_COMPAT_SERVICE,
            new PlatformCompat(mSystemContext));
    traceEnd();

    //阻塞等待installd完成启动,以便有机会创建具有适当权限的关键目录,如/data/user。
    //我们需要在初始化其他服务之前完成此任务。
    traceBeginAndSlog("StartInstaller");
    Installer installer = mSystemServiceManager.startService(Installer.class);
    traceEnd();
...
    //启动服务ActivityManagerService,并为其设置mSystemServiceManager和installer
    traceBeginAndSlog("StartActivityManager");
    ActivityTaskManagerService atm = mSystemServiceManager.startService(
            ActivityTaskManagerService.Lifecycle.class).getService();
    mActivityManagerService = ActivityManagerService.Lifecycle.startService(mSystemServiceManager, atm);
    mActivityManagerService.setSystemServiceManager(mSystemServiceManager);
    mActivityManagerService.setInstaller(installer);
    mWindowManagerGlobalLock = atm.getGlobalLock();
    traceEnd();

    //启动服务PowerManagerService
    //Power manager需要尽早启动,因为其他服务需要它。
    //本机守护进程可能正在监视它的注册,
    //因此它必须准备好立即处理传入的绑定器调用(包括能够验证这些调用的权限)traceBeginAndSlog("StartPowerManager");
    mPowerManagerService = mSystemServiceManager.startService(
PowerManagerService.class);
    traceEnd();

...
    //初始化power management
    traceBeginAndSlog("InitPowerManagement");
    mActivityManagerService.initPowerManagement();
    traceEnd();

    //启动recovery system,以防需要重新启动
    traceBeginAndSlog("StartRecoverySystemService");
    mSystemServiceManager.startService(RecoverySystemService.class);
    traceEnd();
...
    //启动服务LightsService
    //管理led和显示背光,所以我们需要它来打开显示
    traceBeginAndSlog("StartLightsService");
    mSystemServiceManager.startService(LightsService.class);
    traceEnd();
...
    //启动服务DisplayManagerService
    //显示管理器需要在包管理器之前提供显示指标
    traceBeginAndSlog("StartDisplayManager");
    mDisplayManagerService = mSystemServiceManager.startService(DisplayManagerService.class);
    traceEnd();

    // Boot Phases: Phase100: 在初始化package manager之前,需要默认的显示.
    traceBeginAndSlog("WaitForDisplay");
    mSystemServiceManager.startBootPhase(SystemService.PHASE_WAIT_FOR_DEFAULT_DISPLAY);
    traceEnd();

    //当设备正在加密时,仅运行核心
    String cryptState = VoldProperties.decrypt().orElse("");
    if (ENCRYPTING_STATE.equals(cryptState)) {
        Slog.w(TAG, "Detected encryption in progress - only parsing core apps");
        mOnlyCore = true;
    } else if (ENCRYPTED_STATE.equals(cryptState)) {
        Slog.w(TAG, "Device encrypted - only parsing core apps");
        mOnlyCore = true;
    }
...
    //启动服务PackageManagerService
    traceBeginAndSlog("StartPackageManagerService");
    try {
        Watchdog.getInstance().pauseWatchingCurrentThread("packagemanagermain");
        mPackageManagerService = PackageManagerService.main(mSystemContext, installer,
                mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, mOnlyCore);
    } finally {
        Watchdog.getInstance().resumeWatchingCurrentThread("packagemanagermain");
    }
...
    //启动服务UserManagerService,新建目录/data/user/
    traceBeginAndSlog("StartUserManagerService");
    mSystemServiceManager.startService(UserManagerService.LifeCycle.class);
    traceEnd();

    // Set up the Application instance for the system process and get  started.
    //为系统进程设置应用程序实例并开始。
    //设置AMS
    traceBeginAndSlog("SetSystemProcess");
    mActivityManagerService.setSystemProcess();
    traceEnd();

    //使用一个ActivityManager实例完成watchdog设置并监听重启,
//只有在ActivityManagerService作为一个系统进程正确启动后才能这样做
    traceBeginAndSlog("InitWatchdog");
    watchdog.init(mSystemContext, mActivityManagerService);
    traceEnd();

     //传感器服务需要访问包管理器服务、app ops服务和权限服务,
    //因此我们在它们之后启动它。
    //在单独的线程中启动传感器服务。在使用它之前应该检查完成情况。
    mSensorServiceStart = SystemServerInitThreadPool.get().submit(() -> {
        TimingsTraceLog traceLog = new TimingsTraceLog(
                SYSTEM_SERVER_TIMING_ASYNC_TAG, Trace.
TRACE_TAG_SYSTEM_SERVER);
        traceLog.traceBegin(START_SENSOR_SERVICE);
        startSensorService(); //启动传感器服务
        traceLog.traceEnd();
    }, START_SENSOR_SERVICE);
}

2.2.6 [SystemServer.java] startCoreServices

说明:启动核心服务BatteryService,UsageStatsService,WebViewUpdateService、BugreportManagerService、GpuService等

源码:

private void startCoreServices() {
    //启动服务BatteryService,用于统计电池电量,需要LightService.
    mSystemServiceManager.startService(BatteryService.class);

    //启动服务UsageStatsService,用于统计应用使用情况
    mSystemServiceManager.startService(UsageStatsService.class);
    mActivityManagerService.setUsageStatsManager(
            LocalServices.getService(UsageStatsManagerInternal.class));

    //启动服务WebViewUpdateService
    //跟踪可更新的WebView是否处于就绪状态,并监视更新安装
    if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_WEBVIEW)) {
        mWebViewUpdateService = mSystemServiceManager.startService(WebViewUpdateService.class);
    }

    //启动CachedDeviceStateService,跟踪和缓存设备状态
    mSystemServiceManager.startService(CachedDeviceStateService.class);

    //启动BinderCallsStatsService, 跟踪在绑定器调用中花费的cpu时间
    traceBeginAndSlog("StartBinderCallsStatsService");
    mSystemServiceManager.startService(BinderCallsStatsService.LifeCycle.class);
    traceEnd();

    //启动LooperStatsService,跟踪处理程序中处理消息所花费的时间。
    traceBeginAndSlog("StartLooperStatsService");
    mSystemServiceManager.startService(LooperStatsService.Lifecycle.class);
    traceEnd();

    //启动RollbackManagerService,管理apk回滚
    mSystemServiceManager.startService(RollbackManagerService.class);

    //启动BugreportManagerService,捕获bugreports的服务
    mSystemServiceManager.startService(BugreportManagerService.class);

    //启动GpuService,为GPU和GPU驱动程序提供服务。
    mSystemServiceManager.startService(GpuService.class);
}

2.2.7 [SystemServer.java] startOtherServices

说明:启动其他的服务,开始处理一大堆尚未重构和整理的东西,这里的服务太多,大体启动过程类似,就不详细说明

源码:

private void startOtherServices() {
	...
    //启动TelecomLoaderService,通话相关核心服务
    mSystemServiceManager.startService(TelecomLoaderService.class);

    //启动TelephonyRegistry
    telephonyRegistry = new TelephonyRegistry(context);
    ServiceManager.addService("telephony.registry", telephonyRegistry);
	...
	//启动AlarmManagerService,时钟管理
	mSystemServiceManager.startService(new AlarmManagerService(context));
	...
	//启动InputManagerService
	inputManager = new InputManagerService(context);
	ServiceManager.addService(Context.INPUT_SERVICE, inputManager,
            /* allowIsolated= */ false, DUMP_FLAG_PRIORITY_CRITICAL);
	...
	inputManager.setWindowManagerCallbacks(wm.getInputManagerCallback());
    inputManager.start();
	...
	//Phase480:在接收到此启动阶段后,服务可以获得锁设置数据
    mSystemServiceManager.startBootPhase(SystemService.PHASE_LOCK_SETTINGS_READY);

    //Phase500:在接收到这个启动阶段之后,服务可以安全地调用核心系统服务,
    //如PowerManager或PackageManager。
    mSystemServiceManager.startBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);
	
	mActivityManagerService.systemReady(() -> {
        //Phase550:在接收到此引导阶段后,服务可以广播意图。
        mSystemServiceManager.startBootPhase(
                SystemService.PHASE_ACTIVITY_MANAGER_READY);

		//Phase600:在接收到这个启动阶段后,服务可以启动/绑定到第三方应用程序。
        //此时,应用程序将能够对服务进行绑定调用。
        mSystemServiceManager.startBootPhase(
        SystemService.PHASE_THIRD_PARTY_APPS_CAN_START);
	}
}

三、服务启动分析

服务启动流程如下,从阶段0到阶段1000,一共8个阶段。

其中PHASE_BOOT_COMPLETED=1000,该阶段是发生在Boot完成和home应用启动完毕。系统服务更倾向于监听该阶段,而不是注册广播ACTION_BOOT_COMPLETED,从而降低系统延迟。

3.1 PHASE 0

说明:startBootstrapServices() 启动引导级服务

主要启动以下10个服务:

Installer
DeviceIdentifiersPolicyService
UriGrantsManagerService
ActivityTaskManagerService
ActivityManagerService
PowerManagerService
ThermalManagerService
RecoverySystemService
LightsService
DisplayManagerService

启动完后,进入PHASE_WAIT_FOR_DEFAULT_DISPLAY=100, 即Phase100阶段

源码:

    //1.启动DeviceIdentifiersPolicyService
    mSystemServiceManager.startService(DeviceIdentifiersPolicyService.class);

    //2.启动UriGrantsManagerService
    mSystemServiceManager.startService(UriGrantsManagerService.Lifecycle.class);

    //3.启动ActivityTaskManagerService
    atm = mSystemServiceManager.startService(
                ActivityTaskManagerService.Lifecycle.class).getService();

    //4.启动PowerManagerService
    mPowerManagerService = mSystemServiceManager.startService(PowerManagerService.class);

    //5.启动ThermalManagerService
    mSystemServiceManager.startService(ThermalManagerService.class);

    //6.启动RecoverySystemService
    mSystemServiceManager.startService(RecoverySystemService.class);

    //7.启动LightsService
    mSystemServiceManager.startService(LightsService.class);

    //8.启动DisplayManagerService
    mDisplayManagerService = mSystemServiceManager.startService(DisplayManagerService.class);
    
    //执行回调函数 onBootPhase,把PHASE_WAIT_FOR_DEFAULT_DISPLAY=100, 传入各个service的 onBootPhase
    mSystemServiceManager.startBootPhase(SystemService.PHASE_WAIT_FOR_DEFAULT_DISPLAY);
       ...
}

3.2 PHASE 100 (阶段100):

定义:public static final int PHASE_WAIT_FOR_DEFAULT_DISPLAY = 100;
说明: 启动阶段-Boot Phase, 该阶段需要等待Display有默认显示
进入阶段PHASE_WAIT_FOR_DEFAULT_DISPLAY=100回调服务: onBootPhase(100)
流程:startBootPhase(100) -> onBootPhase(100)
从以下源码可以看到这里遍历了一下服务列表,然后回调到各服务的 onBootPhase() 方法中了。每个服务的onBootPhase()处理都不相同,这里不详细分析
源码:

public void startBootPhase(final int phase) {
        ...
        mCurrentPhase = phase;
        ...
        final int serviceLen = mServices.size();
        for (int i = 0; i < serviceLen; i++) {
            final SystemService service = mServices.get(i);
            ...
            try {
                service.onBootPhase(mCurrentPhase); // 轮训前面加过的service,把phase加入服务回调
            } catch (Exception ex) {
                ...
            }
            ...
        }
        ...
    }

创建以下80多个服务:

BatteryService
UsageStatsService
WebViewUpdateService
CachedDeviceStateService
BinderCallsStatsService
LooperStatsService
RollbackManagerService
BugreportManagerService
GpuService

3.3 PHASE 480 (阶段480):

定义:public static final int PHASE_LOCK_SETTINGS_READY = 480;

说明: 该阶段后, 服务可以获取到锁屏设置的数据了

480到500之间没有任何操作,直接进入500

3.4 PHASE 500 (阶段500):

定义:public static final int PHASE_SYSTEM_SERVICES_READY = 500;

说明:该阶段后,服务可以安全地调用核心系统服务,比如PowerManager或PackageManager。

启动以下两个服务:

  • PermissionPolicyService
  • eviceSpecificServices

3.5 PHASE 520 (阶段520):

定义:public static final int PHASE_DEVICE_SPECIFIC_SERVICES_READY = 520;

说明:在接收到这个引导阶段之后,服务可以安全地调用特定于设备的服务。

告诉AMS可以运行第三方代码,Making services ready

mActivityManagerService.systemReady()

3.6 PHASE 550 (阶段550):

定义:public static final int PHASE_ACTIVITY_MANAGER_READY = 550;

说明:该阶段后,服务可以接收到广播Intents

AMS启动native crash监控,启动SystemUI,其余服务调用systemReady()

  1. AMS启动native crash监控:
mActivityManagerService.startObservingNativeCrashes();
  1. 启动systemUI:
startSystemUi()
  1. 其余服务调用systemReady():

networkManagementF.systemReady()
ipSecServiceF.systemReady();
networkStatsF.systemReady();
connectivityF.systemReady();
networkPolicyF.systemReady(networkPolicyInitReadySignal);

3.7 PHASE 600 (阶段600):

定义:public static final int PHASE_THIRD_PARTY_APPS_CAN_START = 600;

说明:该阶段后,服务可以启动/绑定到第三方应用程序。此时,应用程序将能够对服务进行绑定调用。

各种服务调用systemRunning方法:

locationF.systemRunning();
countryDetectorF.systemRunning();
networkTimeUpdaterF.systemRunning();
inputManagerF.systemRunning();
telephonyRegistryF.systemRunning();
mediaRouterF.systemRunning();
mmsServiceF.systemRunning();
incident.systemRunning();
touchEventDispatchServiceF.systemRunning();

3.8 PHASE 1000 (阶段1000):

定义:public static final int PHASE_BOOT_COMPLETED = 1000;

说明: 该阶段后,服务可以允许用户与设备交互。此阶段在引导完成且主应用程序启动时发生。

系统服务可能更倾向于监听此阶段,而不是为完成的操作注册广播接收器,以减少总体延迟。
在经过一系列流程,再调用AMS.finishBooting()时,则进入阶段Phase1000。
到此,系统服务启动阶段完成就绪,system_server进程启动完成则进入Looper.loop()状态,随时待命,等待消息队列MessageQueue中的消息到来,则马上进入执行状态。

四、服务分类

sdk:Android10
system_server进程启动的服务,从源码角度划分为引导服务、核心服务、其他服务3类。

引导服务 Boot Service (10个):

在这里插入图片描述

核心服务 Core Service(9个):

在这里插入图片描述

其他服务 Other Service(70个+):

在这里插入图片描述

五、总结

在这里插入图片描述

Zygote启动后fork的第一个进程为SystemServer,在手机中的进程别名为"system_server",主要用来启动系统中的服务
.Zygote fork后,进入SystemServer的main()
SystemServer在启动过程中,先初始化一些系统变量,加载类库,创建Context对象,创建SystemServiceManager对象等候再启动服务
启动的服务分为 引导服务(Boot Service)、核心服务(Core Service)和其他服务(Other Service)三大类,共90多个服务
SystemServer在启动服务前,会尝试与Zygote建立Socket通信,通信成功后才去启动服务
启动的服务都单独运行在SystemServer的各自线程中,同属于SystemServer进程。

六、相关日志

一份完整的开机SystemServer日志。

搜索 "SystemServer"1个文件中匹配到420次,总计查找1次)
  C:\Users\henry.xue\666.txt (匹配420次)
	行  4027: 01-01 08:00:22.187  1504  1504 I SystemServer: InitBeforeStartServices
	行  4030: 01-01 08:00:22.194  1504  1504 W SystemServer: System clock is before 1970; setting to 1970.4031: 01-01 08:00:22.195  1504  1504 I SystemServer: Entered the Android system server!4163: 01-01 08:00:22.591  1504  1504 D SystemServerTiming: InitBeforeStartServices took to complete: 403ms
	行  4164: 01-01 08:00:22.591  1504  1504 I SystemServer: StartServices
	行  4165: 01-01 08:00:22.592  1504  1504 I SystemServer: StartWatchdog
	行  4170: 01-01 08:00:22.617  1504  1504 D SystemServerTiming: StartWatchdog took to complete: 25ms
	行  4171: 01-01 08:00:22.617  1504  1504 I SystemServer: Reading configuration...4172: 01-01 08:00:22.617  1504  1504 I SystemServer: ReadingSystemConfig
	行  4173: 01-01 08:00:22.619  1504  1504 D SystemServerTiming: ReadingSystemConfig took to complete: 1ms
	行  4174: 01-01 08:00:22.619  1504  1504 I SystemServer: StartInstaller
	行  4176: 01-01 08:00:22.619  1504  1642 D SystemServerInitThreadPool: Started executing ReadingSystemConfig
	行  4178: 01-01 08:00:22.621  1504  1504 D SystemServerTiming: StartInstaller took to complete: 2ms
	行  4179: 01-01 08:00:22.621  1504  1504 I SystemServer: DeviceIdentifiersPolicyService
	行  4181: 01-01 08:00:22.622  1504  1504 D SystemServerTiming: DeviceIdentifiersPolicyService took to complete: 1ms
	行  4182: 01-01 08:00:22.622  1504  1504 I SystemServer: UriGrantsManagerService
	行  4184: 01-01 08:00:22.624  1504  1504 D SystemServerTiming: UriGrantsManagerService took to complete: 1ms
	行  4185: 01-01 08:00:22.624  1504  1504 I SystemServer: StartActivityManager
	行  4229: 01-01 08:00:22.768  1504  1504 D SystemServerTiming: StartActivityManager took to complete: 143ms
	行  4230: 01-01 08:00:22.768  1504  1504 I SystemServer: StartPowerManager
	行  4235: 01-01 08:00:22.783  1504  1504 D SystemServerTiming: StartPowerManager took to complete: 15ms
	行  4236: 01-01 08:00:22.783  1504  1504 I SystemServer: StartThermalManager
	行  4238: 01-01 08:00:22.784  1504  1504 D SystemServerTiming: StartThermalManager took to complete: 1ms
	行  4239: 01-01 08:00:22.784  1504  1504 I SystemServer: InitPowerManagement
	行  4240: 01-01 08:00:22.787  1504  1504 D SystemServerTiming: InitPowerManagement took to complete: 3ms
	行  4241: 01-01 08:00:22.787  1504  1504 I SystemServer: StartRecoverySystemService
	行  4243: 01-01 08:00:22.789  1504  1504 D SystemServerTiming: StartRecoverySystemService took to complete: 2ms
	行  4245: 01-01 08:00:22.790  1504  1504 I SystemServer: StartLightsService
	行  4247: 01-01 08:00:22.795  1504  1504 D SystemServerTiming: StartLightsService took to complete: 5ms
	行  4248: 01-01 08:00:22.795  1504  1504 I SystemServer: StartSidekickService
	行  4249: 01-01 08:00:22.795  1504  1504 D SystemServerTiming: StartSidekickService took to complete: 0ms
	行  4250: 01-01 08:00:22.795  1504  1504 I SystemServer: StartDisplayManager
	行  4253: 01-01 08:00:22.799  1504  1504 D SystemServerTiming: StartDisplayManager took to complete: 4ms
	行  4254: 01-01 08:00:22.799  1504  1504 I SystemServer: WaitForDisplay
	行  4263: 01-01 08:00:22.807  1504  1504 D SystemServerTiming: WaitForDisplay took to complete: 9ms
	行  4267: 01-01 08:00:22.808  1504  1504 I SystemServer: StartPackageManagerService
	行  4282: 01-01 08:00:22.833  1504  1642 D SystemServerInitThreadPool: Finished executing ReadingSystemConfig
	行  5304: 01-01 08:00:25.569  1504  1953 D SystemServerInitThreadPool: Started executing prepareAppData
	行  5327: 01-01 08:00:25.690  1504  1504 D SystemServerTiming: StartPackageManagerService took to complete: 2883ms
	行  5329: 01-01 08:00:25.691  1504  1504 I SystemServer: StartOtaDexOptService
	行  5333: 01-01 08:00:25.693  1504  1504 D SystemServerTiming: StartOtaDexOptService took to complete: 1ms
	行  5334: 01-01 08:00:25.693  1504  1504 I SystemServer: StartUserManagerService
	行  5336: 01-01 08:00:25.693  1504  1504 D SystemServerTiming: StartUserManagerService took to complete: 1ms
	行  5337: 01-01 08:00:25.693  1504  1504 I SystemServer: InitAttributerCache
	行  5338: 01-01 08:00:25.694  1504  1504 D SystemServerTiming: InitAttributerCache took to complete: 0ms
	行  5339: 01-01 08:00:25.694  1504  1504 I SystemServer: SetSystemProcess
	行  5344: 01-01 08:00:25.707  1504  1504 D SystemServerTiming: SetSystemProcess took to complete: 13ms
	行  5345: 01-01 08:00:25.707  1504  1504 I SystemServer: InitWatchdog
	行  5346: 01-01 08:00:25.707  1504  1504 D SystemServerTiming: InitWatchdog took to complete: 1ms
	行  5347: 01-01 08:00:25.708  1504  1504 I SystemServer: StartOverlayManagerService
	行  5350: 01-01 08:00:25.783  1504  1953 D SystemServerTimingAsync: AppDataFixup took to complete: 214ms
	行  5351: 01-01 08:00:25.829  1504  1504 D SystemServerTiming: StartOverlayManagerService took to complete: 121ms
	行  5353: 01-01 08:00:25.829  1504  1504 I SystemServer: StartSensorPrivacyService
	行  5355: 01-01 08:00:25.830  1504  1504 D SystemServerTiming: StartSensorPrivacyService took to complete: 1ms
	行  5356: 01-01 08:00:25.830  1504  1504 I SystemServer: StartBatteryService
	行  5358: 01-01 08:00:25.830  1504  1959 D SystemServerInitThreadPool: Started executing StartSensorService
	行  5423: 01-01 08:00:25.843  1504  1959 D SystemServerTimingAsync: StartSensorService took to complete: 13ms
	行  5424: 01-01 08:00:25.843  1504  1959 D SystemServerInitThreadPool: Finished executing StartSensorService
	行  5440: 01-01 08:00:25.875  1504  1504 D SystemServerTiming: StartBatteryService took to complete: 44ms
	行  5441: 01-01 08:00:25.875  1504  1504 I SystemServer: StartUsageService
	行  5445: 01-01 08:00:25.883  1504  1504 D SystemServerTiming: StartUsageService took to complete: 9ms
	行  5446: 01-01 08:00:25.884  1504  1504 I SystemServer: StartWebViewUpdateService
	行  5448: 01-01 08:00:25.886  1504  1504 D SystemServerTiming: StartWebViewUpdateService took to complete: 2ms
	行  5449: 01-01 08:00:25.886  1504  1504 I SystemServer: StartCachedDeviceStateService
	行  5451: 01-01 08:00:25.886  1504  1504 D SystemServerTiming: StartCachedDeviceStateService took to complete: 0ms
	行  5452: 01-01 08:00:25.886  1504  1504 I SystemServer: StartBinderCallsStatsService
	行  5454: 01-01 08:00:25.887  1504  1504 D SystemServerTiming: StartBinderCallsStatsService took to complete: 1ms
	行  5455: 01-01 08:00:25.887  1504  1504 I SystemServer: StartLooperStatsService
	行  5457: 01-01 08:00:25.888  1504  1504 D SystemServerTiming: StartLooperStatsService took to complete: 1ms
	行  5458: 01-01 08:00:25.888  1504  1504 I SystemServer: StartRollbackManagerService
	行  5461: 01-01 08:00:25.893  1504  1504 D SystemServerTiming: StartRollbackManagerService took to complete: 5ms
	行  5462: 01-01 08:00:25.893  1504  1504 I SystemServer: StartBugreportManagerService
	行  5464: 01-01 08:00:25.894  1504  1504 D SystemServerTiming: StartBugreportManagerService took to complete: 1ms
	行  5465: 01-01 08:00:25.894  1504  1504 I SystemServer: GpuService
	行  5467: 01-01 08:00:25.894  1504  1504 D SystemServerTiming: GpuService took to complete: 0ms
	行  5468: 01-01 08:00:25.894  1504  1504 I SystemServer: StartKeyAttestationApplicationIdProviderService
	行  5469: 01-01 08:00:25.895  1504  1969 D SystemServerInitThreadPool: Started executing SecondaryZygotePreload
	行  5470: 01-01 08:00:25.895  1504  1969 I SystemServer: SecondaryZygotePreload
	行  5471: 01-01 08:00:25.895  1504  1504 D SystemServerTiming: StartKeyAttestationApplicationIdProviderService took to complete: 0ms
	行  5472: 01-01 08:00:25.895  1504  1504 I SystemServer: StartKeyChainSystemService
	行  5474: 01-01 08:00:25.895  1504  1504 D SystemServerTiming: StartKeyChainSystemService took to complete: 0ms
	行  5475: 01-01 08:00:25.896  1504  1504 I SystemServer: StartSchedulingPolicyService
	行  5476: 01-01 08:00:25.896  1504  1970 D SystemServerInitThreadPool: Started executing SchedulingPolicyService.<init>5477: 01-01 08:00:25.897  1504  1504 D SystemServerTiming: StartSchedulingPolicyService took to complete: 1ms
	行  5478: 01-01 08:00:25.897  1504  1504 I SystemServer: StartTelecomLoaderService
	行  5480: 01-01 08:00:25.897  1504  1504 D SystemServerTiming: StartTelecomLoaderService took to complete: 0ms
	行  5481: 01-01 08:00:25.897  1504  1504 I SystemServer: StartTelephonyRegistry
	行  5482: 01-01 08:00:25.898  1504  1504 D SystemServerTiming: StartTelephonyRegistry took to complete: 1ms
	行  5483: 01-01 08:00:25.898  1504  1504 I SystemServer: StartEntropyMixer
	行  5496: 01-01 08:00:25.900  1504  1504 W EntropyMixer: 	at com.android.server.SystemServer.startOtherServices(SystemServer.java:977)5497: 01-01 08:00:25.900  1504  1504 W EntropyMixer: 	at com.android.server.SystemServer.run(SystemServer.java:519)5498: 01-01 08:00:25.900  1504  1504 W EntropyMixer: 	at com.android.server.SystemServer.main(SystemServer.java:356)5509: 01-01 08:00:25.902  1504  1504 D SystemServerTiming: StartEntropyMixer took to complete: 4ms
	行  5510: 01-01 08:00:25.902  1504  1504 I SystemServer: StartAccountManagerService
	行  5512: 01-01 08:00:25.905  1504  1504 D SystemServerTiming: StartAccountManagerService took to complete: 3ms
	行  5513: 01-01 08:00:25.906  1504  1504 I SystemServer: StartContentService
	行  5515: 01-01 08:00:25.907  1504  1504 D SystemServerTiming: StartContentService took to complete: 1ms
	行  5516: 01-01 08:00:25.907  1504  1504 I SystemServer: InstallSystemProviders
	行  5520: 01-01 08:00:25.911  1504  1970 D SystemServerInitThreadPool: Finished executing SchedulingPolicyService.<init>5542: 01-01 08:00:25.930  1504  1504 I SettingsState: 	at com.android.server.SystemServer.startOtherServices(SystemServer.java:992)5543: 01-01 08:00:25.930  1504  1504 I SettingsState: 	at com.android.server.SystemServer.run(SystemServer.java:519)5544: 01-01 08:00:25.930  1504  1504 I SettingsState: 	at com.android.server.SystemServer.main(SystemServer.java:356)5551: 01-01 08:00:25.947  1504  1504 D SystemServerTiming: InstallSystemProviders took to complete: 40ms
	行  5552: 01-01 08:00:25.947  1504  1504 I SystemServer: StartDropBoxManager
	行  5554: 01-01 08:00:25.948  1504  1504 D SystemServerTiming: StartDropBoxManager took to complete: 1ms
	行  5555: 01-01 08:00:25.948  1504  1504 I SystemServer: StartVibratorService
	行  5559: 01-01 08:00:25.955  1504  1504 D SystemServerTiming: StartVibratorService took to complete: 6ms
	行  5560: 01-01 08:00:25.955  1504  1504 I SystemServer: StartDynamicSystemService
	行  5561: 01-01 08:00:25.956  1504  1504 D SystemServerTiming: StartDynamicSystemService took to complete: 1ms
	行  5562: 01-01 08:00:25.956  1504  1504 I SystemServer: StartConsumerIrService
	行  5565: 01-01 08:00:25.958  1504  1504 D SystemServerTiming: StartConsumerIrService took to complete: 2ms
	行  5566: 01-01 08:00:25.958  1504  1504 I SystemServer: StartAlarmManagerService
	行  5571: 05-08 18:46:58.002  1504  1504 D SystemServerTiming: StartAlarmManagerService took to complete: 4ms
	行  5572: 05-08 18:46:58.002  1504  1504 I SystemServer: StartInputManagerService
	行  5574: 05-08 18:46:58.006  1504  1504 D SystemServerTiming: StartInputManagerService took to complete: 4ms
	行  5575: 05-08 18:46:58.007  1504  1504 I SystemServer: StartWindowManagerService
	行  5580: 05-08 18:46:58.019  1504  1504 D SystemServerTiming: StartWindowManagerService took to complete: 12ms
	行  5581: 05-08 18:46:58.019  1504  1504 I SystemServer: SetWindowManagerService
	行  5584: 05-08 18:46:58.043  1504  1504 D SystemServerTiming: SetWindowManagerService took to complete: 25ms
	行  5585: 05-08 18:46:58.044  1504  1504 I SystemServer: WindowManagerServiceOnInitReady
	行  5586: 05-08 18:46:58.058  1504  1504 D SystemServerTiming: WindowManagerServiceOnInitReady took to complete: 14ms
	行  5587: 05-08 18:46:58.058  1504  1504 I SystemServer: StartInputManager
	行  5589: 05-08 18:46:58.059  1504  1977 D SystemServerInitThreadPool: Started executing StartHidlServices
	行  5593: 05-08 18:46:58.065  1504  1504 D SystemServerTiming: StartInputManager took to complete: 7ms
	行  5596: 05-08 18:46:58.065  1504  1504 I SystemServer: DisplayManagerWindowManagerAndInputReady
	行  5598: 05-08 18:46:58.065  1504  1504 D SystemServerTiming: DisplayManagerWindowManagerAndInputReady took to complete: 0ms
	行  5599: 05-08 18:46:58.065  1504  1504 I SystemServer: StartBluetoothService
	行  5605: 05-08 18:46:58.068  1504  1504 D SystemServerTiming: StartBluetoothService took to complete: 2ms
	行  5606: 05-08 18:46:58.068  1504  1504 I SystemServer: IpConnectivityMetrics
	行  5610: 05-08 18:46:58.070  1504  1504 D SystemServerTiming: IpConnectivityMetrics took to complete: 3ms
	行  5611: 05-08 18:46:58.070  1504  1504 I SystemServer: NetworkWatchlistService
	行  5615: 05-08 18:46:58.073  1504  1977 D SystemServerTimingAsync: StartHidlServices took to complete: 14ms
	行  5616: 05-08 18:46:58.073  1504  1977 D SystemServerInitThreadPool: Finished executing StartHidlServices
	行  5622: 05-08 18:46:58.075  1504  1504 D SystemServerTiming: NetworkWatchlistService took to complete: 5ms
	行  5623: 05-08 18:46:58.075  1504  1504 I SystemServer: PinnerService
	行  5626: 05-08 18:46:58.078  1504  1504 D SystemServerTiming: PinnerService took to complete: 2ms
	行  5627: 05-08 18:46:58.079  1504  1504 I SystemServer: ActivityTriggerService
	行  5634: 05-08 18:46:58.079  1504  1504 D SystemServerTiming: ActivityTriggerService took to complete: 1ms
	行  5635: 05-08 18:46:58.079  1504  1504 I SystemServer: SignedConfigService
	行  5636: 05-08 18:46:58.079  1504  1504 D SystemServerTiming: SignedConfigService took to complete: 0ms
	行  5652: 05-08 18:46:58.092  1504  1504 I SystemServer: StartInputMethodManagerLifecycle
	行  5658: 05-08 18:46:58.102  1504  1504 D SystemServerTiming: StartInputMethodManagerLifecycle took to complete: 9ms
	行  5659: 05-08 18:46:58.102  1504  1504 I SystemServer: StartAccessibilityManagerService
	行  5661: 05-08 18:46:58.105  1504  1504 D SystemServerTiming: StartAccessibilityManagerService took to complete: 3ms
	行  5662: 05-08 18:46:58.105  1504  1504 I SystemServer: MakeDisplayReady
	行  5679: 05-08 18:46:58.128  1504  1504 D SystemServerTiming: MakeDisplayReady took to complete: 23ms
	行  5680: 05-08 18:46:58.128  1504  1504 I SystemServer: StartStorageManagerService
	行  5690: 05-08 18:46:58.138  1504  1504 D SystemServerTiming: StartStorageManagerService took to complete: 10ms
	行  5691: 05-08 18:46:58.138  1504  1504 I SystemServer: StartStorageStatsService
	行  5696: 05-08 18:46:58.142  1504  1504 D SystemServerTiming: StartStorageStatsService took to complete: 5ms
	行  5697: 05-08 18:46:58.143  1504  1504 I SystemServer: StartUiModeManager
	行  5701: 05-08 18:46:58.145  1504  1985 D SystemServerInitThreadPool: Started executing UiModeManager.onStart
	行  5703: 05-08 18:46:58.146  1504  1504 D SystemServerTiming: StartUiModeManager took to complete: 3ms
	行  5704: 05-08 18:46:58.146  1504  1504 I SystemServer: UpdatePackagesIfNeeded
	行  5707: 05-08 18:46:58.146  1504  1504 D SystemServerTiming: UpdatePackagesIfNeeded took to complete: 0ms
	行  5708: 05-08 18:46:58.146  1504  1504 I SystemServer: PerformFstrimIfNeeded
	行  5710: 05-08 18:46:58.147  1504  1504 D SystemServerTiming: PerformFstrimIfNeeded took to complete: 0ms
	行  5711: 05-08 18:46:58.147  1504  1504 I SystemServer: StartLockSettingsService
	行  5716: 05-08 18:46:58.164  1504  1504 D SystemServerTiming: StartLockSettingsService took to complete: 17ms
	行  5717: 05-08 18:46:58.164  1504  1504 I SystemServer: StartPersistentDataBlock
	行  5720: 05-08 18:46:58.165  1504  1504 D SystemServerTiming: StartPersistentDataBlock took to complete: 1ms
	行  5721: 05-08 18:46:58.166  1504  1986 D SystemServerInitThreadPool: Started executing PersistentDataBlockService.onStart
	行  5722: 05-08 18:46:58.167  1504  1504 I SystemServer: StartTestHarnessMode
	行  5730: 05-08 18:46:58.168  1504  1986 E PersistentDataBlockService: 	at com.android.server.SystemServerInitThreadPool.lambda$submit$0$SystemServerInitThreadPool(SystemServerInitThreadPool.java:72)5731: 05-08 18:46:58.168  1504  1986 E PersistentDataBlockService: 	at com.android.server.-$$Lambda$SystemServerInitThreadPool$jLyL3DFmbjsFesU5SGktD3NoWSc.run(Unknown Source:6)5737: 05-08 18:46:58.169  1504  1504 D SystemServerTiming: StartTestHarnessMode took to complete: 3ms
	行  5738: 05-08 18:46:58.170  1504  1504 I SystemServer: StartOemLockService
	行  5744: 05-08 18:46:58.172  1504  1504 D SystemServerTiming: StartOemLockService took to complete: 3ms
	行  5745: 05-08 18:46:58.172  1504  1504 I SystemServer: StartDeviceIdleController
	行  5747: 05-08 18:46:58.176  1504  1504 D SystemServerTiming: StartDeviceIdleController took to complete: 3ms
	行  5748: 05-08 18:46:58.176  1504  1504 I SystemServer: StartDevicePolicyManager
	行  5750: 05-08 18:46:58.179  1504  1504 D SystemServerTiming: StartDevicePolicyManager took to complete: 4ms
	行  5751: 05-08 18:46:58.180  1504  1504 I SystemServer: StartStatusBarManagerService
	行  5752: 05-08 18:46:58.181  1504  1504 D SystemServerTiming: StartStatusBarManagerService took to complete: 1ms
	行  5753: 05-08 18:46:58.184  1504  1504 D SystemServer: ContentCaptureService disabled because resource is not overlaid
	行  5755: 05-08 18:46:58.185  1504  1504 D SystemServer: AttentionService is not configured on this device
	行  5756: 05-08 18:46:58.185  1504  1504 D SystemServer: SystemCaptionsManagerService disabled because resource is not overlaid
	行  5757: 05-08 18:46:58.185  1504  1504 D SystemServer: AppPredictionService not defined by OEM
	行  5758: 05-08 18:46:58.185  1504  1504 D SystemServer: ContentSuggestionsService not defined by OEM
	行  5759: 05-08 18:46:58.185  1504  1504 I SystemServer: InitNetworkStackClient
	行  5760: 05-08 18:46:58.186  1504  1985 D SystemServerInitThreadPool: Finished executing UiModeManager.onStart
	行  5761: 05-08 18:46:58.191  1504  1504 D SystemServerTiming: InitNetworkStackClient took to complete: 6ms
	行  5762: 05-08 18:46:58.191  1504  1504 I SystemServer: StartNetworkManagementService
	行  5764: 05-08 18:46:58.194  1504  1986 D SystemServerInitThreadPool: Finished executing PersistentDataBlockService.onStart
	行  5765: 05-08 18:46:58.194  1504  1504 D SystemServerTiming: StartNetworkManagementService took to complete: 3ms
	行  5766: 05-08 18:46:58.194  1504  1504 I SystemServer: StartIpSecService
	行  5767: 05-08 18:46:58.196  1504  1504 D SystemServerTiming: StartIpSecService took to complete: 1ms
	行  5768: 05-08 18:46:58.196  1504  1504 I SystemServer: StartTextServicesManager
	行  5770: 05-08 18:46:58.197  1504  1504 D SystemServerTiming: StartTextServicesManager took to complete: 1ms
	行  5771: 05-08 18:46:58.197  1504  1504 I SystemServer: StartTextClassificationManagerService
	行  5773: 05-08 18:46:58.198  1504  1504 D SystemServerTiming: StartTextClassificationManagerService took to complete: 1ms
	行  5774: 05-08 18:46:58.198  1504  1504 I SystemServer: StartNetworkScoreService
	行  5777: 05-08 18:46:58.200  1504  1504 D SystemServerTiming: StartNetworkScoreService took to complete: 1ms
	行  5778: 05-08 18:46:58.200  1504  1504 I SystemServer: StartNetworkStatsService
	行  5780: 05-08 18:46:58.202  1504  1504 D SystemServerTiming: StartNetworkStatsService took to complete: 2ms
	行  5781: 05-08 18:46:58.202  1504  1504 I SystemServer: StartNetworkPolicyManagerService
	行  5782: 05-08 18:46:58.205  1504  1504 D SystemServerTiming: StartNetworkPolicyManagerService took to complete: 3ms
	行  5783: 05-08 18:46:58.205  1504  1504 I SystemServer: StartWifi
	行  5808: 05-08 18:46:58.343  1504  1504 D SystemServerTiming: StartWifi took to complete: 139ms
	行  5809: 05-08 18:46:58.343  1504  1504 I SystemServer: StartWifiScanning
	行  5815: 05-08 18:46:58.346  1504  1504 D SystemServerTiming: StartWifiScanning took to complete: 3ms
	行  5816: 05-08 18:46:58.346  1504  1504 I SystemServer: StartRttService
	行  5819: 05-08 18:46:58.349  1504  1504 D SystemServerTiming: StartRttService took to complete: 2ms
	行  5820: 05-08 18:46:58.349  1504  1504 I SystemServer: StartWifiAware
	行  5823: 05-08 18:46:58.351  1504  1504 D SystemServerTiming: StartWifiAware took to complete: 2ms
	行  5825: 05-08 18:46:58.351  1504  1504 I SystemServer: StartWifiP2P
	行  5830: 05-08 18:46:58.358  1504  1504 D SystemServerTiming: StartWifiP2P took to complete: 7ms
	行  5831: 05-08 18:46:58.358  1504  1504 I SystemServer: StartEthernet
	行  5835: 05-08 18:46:58.360  1504  1504 D SystemServerTiming: StartEthernet took to complete: 1ms
	行  5836: 05-08 18:46:58.360  1504  1504 I SystemServer: StartConnectivityService
	行  5843: 05-08 18:46:58.373  1504  1953 D SystemServerTimingAsync: AppDataPrepare took to complete: 550ms
	行  5845: 05-08 18:46:58.373  1504  1953 D SystemServerInitThreadPool: Finished executing prepareAppData
	行  5856: 05-08 18:46:58.377  1504  1504 D SystemServerTiming: StartConnectivityService took to complete: 17ms
	行  5857: 05-08 18:46:58.377  1504  1504 I SystemServer: StartNsdService
	行  5862: 05-08 18:46:58.379  1504  1504 D SystemServerTiming: StartNsdService took to complete: 3ms
	行  5863: 05-08 18:46:58.379  1504  1504 I SystemServer: StartSystemUpdateManagerService
	行  5867: 05-08 18:46:58.381  1504  1504 D SystemServerTiming: StartSystemUpdateManagerService took to complete: 1ms
	行  5868: 05-08 18:46:58.381  1504  1504 I SystemServer: StartUpdateLockService
	行  5869: 05-08 18:46:58.381  1504  1504 D SystemServerTiming: StartUpdateLockService took to complete: 1ms
	行  5870: 05-08 18:46:58.381  1504  1504 I SystemServer: StartNotificationManager
	行  5882: 05-08 18:46:58.398  1504  1504 D SystemServerTiming: StartNotificationManager took to complete: 16ms
	行  5883: 05-08 18:46:58.398  1504  1504 I SystemServer: StartDeviceMonitor
	行  5885: 05-08 18:46:58.399  1504  1504 D SystemServerTiming: StartDeviceMonitor took to complete: 2ms
	行  5886: 05-08 18:46:58.399  1504  1504 I SystemServer: StartLocationManagerService
	行  5889: 05-08 18:46:58.400  1504  1504 D SystemServerTiming: StartLocationManagerService took to complete: 1ms
	行  5890: 05-08 18:46:58.401  1504  1504 I SystemServer: StartCountryDetectorService
	行  5891: 05-08 18:46:58.401  1504  1504 D SystemServerTiming: StartCountryDetectorService took to complete: 1ms
	行  5892: 05-08 18:46:58.401  1504  1504 I SystemServer: StartTimeDetectorService
	行  5894: 05-08 18:46:58.402  1504  1504 D SystemServerTiming: StartTimeDetectorService took to complete: 1ms
	行  5895: 05-08 18:46:58.403  1504  1504 I SystemServer: StartSearchManagerService
	行  5897: 05-08 18:46:58.404  1504  1504 D SystemServerTiming: StartSearchManagerService took to complete: 1ms
	行  5898: 05-08 18:46:58.404  1504  1504 I SystemServer: StartWallpaperManagerService
	行  5900: 05-08 18:46:58.405  1504  1504 D SystemServerTiming: StartWallpaperManagerService took to complete: 2ms
	行  5901: 05-08 18:46:58.405  1504  1504 I SystemServer: StartAudioService
	行  5923: 05-08 18:46:58.448  1504  1504 D SystemServerTiming: StartAudioService took to complete: 43ms
	行  5924: 05-08 18:46:58.448  1504  1504 I SystemServer: StartDockObserver
	行  5927: 05-08 18:46:58.449  1504  1504 D SystemServerTiming: StartDockObserver took to complete: 1ms
	行  5928: 05-08 18:46:58.449  1504  1504 I SystemServer: StartWiredAccessoryManager
	行  5935: 05-08 18:46:58.452  1504  1504 D SystemServerTiming: StartWiredAccessoryManager took to complete: 2ms
	行  5936: 05-08 18:46:58.452  1504  1504 I SystemServer: StartMidiManager
	行  5938: 05-08 18:46:58.453  1504  1504 D SystemServerTiming: StartMidiManager took to complete: 1ms
	行  5939: 05-08 18:46:58.453  1504  1504 I SystemServer: StartAdbService
	行  5941: 05-08 18:46:58.454  1504  1504 D SystemServerTiming: StartAdbService took to complete: 2ms
	行  5942: 05-08 18:46:58.454  1504  1504 I SystemServer: StartUsbService
	行  5957: 05-08 18:46:58.457  1504  1504 I UsbDeviceManager: 	at com.android.server.SystemServer.startOtherServices(SystemServer.java:1584)5958: 05-08 18:46:58.457  1504  1504 I UsbDeviceManager: 	at com.android.server.SystemServer.run(SystemServer.java:519)5959: 05-08 18:46:58.457  1504  1504 I UsbDeviceManager: 	at com.android.server.SystemServer.main(SystemServer.java:356)5983: 05-08 18:46:58.470  1504  1504 D SystemServerTiming: StartUsbService took to complete: 15ms
	行  5984: 05-08 18:46:58.470  1504  1504 I SystemServer: StartSerialService
	行  5985: 05-08 18:46:58.471  1504  1504 D SystemServerTiming: StartSerialService took to complete: 1ms
	行  5986: 05-08 18:46:58.471  1504  1504 I SystemServer: StartHardwarePropertiesManagerService
	行  5988: 05-08 18:46:58.472  1504  1504 D SystemServerTiming: StartHardwarePropertiesManagerService took to complete: 2ms
	行  5989: 05-08 18:46:58.473  1504  1504 I SystemServer: StartTwilightService
	行  5991: 05-08 18:46:58.473  1504  1504 D SystemServerTiming: StartTwilightService took to complete: 0ms
	行  5992: 05-08 18:46:58.473  1504  1504 I SystemServer: StartColorDisplay
	行  5995: 05-08 18:46:58.474  1504  1504 D SystemServerTiming: StartColorDisplay took to complete: 1ms
	行  5996: 05-08 18:46:58.474  1504  1504 I SystemServer: StartJobScheduler
	行  6007: 05-08 18:46:58.484  1504  1504 D SystemServerTiming: StartJobScheduler took to complete: 9ms
	行  6008: 05-08 18:46:58.484  1504  1504 I SystemServer: StartSoundTrigger
	行  6010: 05-08 18:46:58.485  1504  1504 D SystemServerTiming: StartSoundTrigger took to complete: 1ms
	行  6011: 05-08 18:46:58.485  1504  1504 I SystemServer: StartTrustManager
	行  6013: 05-08 18:46:58.486  1504  1504 D SystemServerTiming: StartTrustManager took to complete: 1ms
	行  6014: 05-08 18:46:58.486  1504  1504 I SystemServer: StartBackupManager
	行  6016: 05-08 18:46:58.489  1504  1504 D SystemServerTiming: StartBackupManager took to complete: 2ms
	行  6017: 05-08 18:46:58.489  1504  1504 I SystemServer: StartAppWidgetService
	行  6019: 05-08 18:46:58.494  1504  1504 D SystemServerTiming: StartAppWidgetService took to complete: 4ms
	行  6020: 05-08 18:46:58.494  1504  1504 I SystemServer: StartRoleManagerService
	行  6021: 05-08 18:46:58.497  1504  1504 D SystemServerTiming: StartRoleManagerService took to complete: 2ms
	行  6022: 05-08 18:46:58.497  1504  1504 I SystemServer: StartVoiceRecognitionManager
	行  6026: 05-08 18:46:58.502  1504  1504 D SystemServerTiming: StartVoiceRecognitionManager took to complete: 5ms
	行  6027: 05-08 18:46:58.502  1504  1504 I SystemServer: StartGestureLauncher
	行  6029: 05-08 18:46:58.502  1504  1504 D SystemServerTiming: StartGestureLauncher took to complete: 0ms
	行  6030: 05-08 18:46:58.502  1504  1504 I SystemServer: StartSensorNotification
	行  6032: 05-08 18:46:58.502  1504  1504 D SystemServerTiming: StartSensorNotification took to complete: 0ms
	行  6033: 05-08 18:46:58.502  1504  1504 I SystemServer: StartContextHubSystemService
	行  6035: 05-08 18:46:58.502  1504  1504 D SystemServerTiming: StartContextHubSystemService took to complete: 0ms
	行  6036: 05-08 18:46:58.502  1504  1642 D SystemServerInitThreadPool: Started executing Init ContextHubSystemService
	行  6037: 05-08 18:46:58.503  1504  1504 I SystemServer: StartDiskStatsService
	行  6040: 05-08 18:46:58.504  1504  1642 D SystemServerInitThreadPool: Finished executing Init ContextHubSystemService
	行  6041: 05-08 18:46:58.505  1504  1504 D SystemServerTiming: StartDiskStatsService took to complete: 2ms
	行  6042: 05-08 18:46:58.505  1504  1504 I SystemServer: Start HenryService
	行  6044: 05-08 18:46:58.506  1504  1504 D SystemServerTiming: Start HenryService took to complete: 1ms
	行  6045: 05-08 18:46:58.506  1504  1504 I SystemServer: RuntimeService
	行  6046: 05-08 18:46:58.507  1504  1504 D SystemServerTiming: RuntimeService took to complete: 1ms
	行  6047: 05-08 18:46:58.507  1504  1504 I SystemServer: StartNetworkTimeUpdateService
	行  6049: 05-08 18:46:58.507  1504  1504 D SystemServer: Using networkTimeUpdater class=class com.android.server.NewNetworkTimeUpdateService
	行  6050: 05-08 18:46:58.508  1504  1504 D SystemServerTiming: StartNetworkTimeUpdateService took to complete: 2ms
	行  6051: 05-08 18:46:58.508  1504  1504 I SystemServer: CertBlacklister
	行  6052: 05-08 18:46:58.509  1504  1504 D SystemServerTiming: CertBlacklister took to complete: 0ms
	行  6053: 05-08 18:46:58.509  1504  1504 I SystemServer: StartEmergencyAffordanceService
	行  6055: 05-08 18:46:58.509  1504  1504 D SystemServerTiming: StartEmergencyAffordanceService took to complete: 0ms
	行  6056: 05-08 18:46:58.509  1504  1504 I SystemServer: StartDreamManager
	行  6058: 05-08 18:46:58.510  1504  1504 D SystemServerTiming: StartDreamManager took to complete: 1ms
	行  6059: 05-08 18:46:58.510  1504  1504 I SystemServer: AddGraphicsStatsService
	行  6060: 05-08 18:46:58.512  1504  1504 D SystemServerTiming: AddGraphicsStatsService took to complete: 2ms
	行  6061: 05-08 18:46:58.512  1504  1504 I SystemServer: StartPrintManager
	行  6063: 05-08 18:46:58.513  1504  1504 D SystemServerTiming: StartPrintManager took to complete: 1ms
	行  6064: 05-08 18:46:58.513  1504  1504 I SystemServer: StartCompanionDeviceManager
	行  6066: 05-08 18:46:58.514  1504  1504 D SystemServerTiming: StartCompanionDeviceManager took to complete: 1ms
	行  6067: 05-08 18:46:58.515  1504  1504 I SystemServer: StartRestrictionManager
	行  6069: 05-08 18:46:58.515  1504  1504 D SystemServerTiming: StartRestrictionManager took to complete: 1ms
	行  6070: 05-08 18:46:58.515  1504  1504 I SystemServer: StartMediaSessionService
	行  6073: 05-08 18:46:58.523  1504  1504 D SystemServerTiming: StartMediaSessionService took to complete: 7ms
	行  6074: 05-08 18:46:58.523  1504  1504 I SystemServer: StartMediaResourceMonitor
	行  6076: 05-08 18:46:58.523  1504  1504 D SystemServerTiming: StartMediaResourceMonitor took to complete: 1ms
	行  6077: 05-08 18:46:58.523  1504  1504 I SystemServer: StartMediaRouterService
	行  6078: 05-08 18:46:58.524  1504  1504 D SystemServerTiming: StartMediaRouterService took to complete: 1ms
	行  6079: 05-08 18:46:58.524  1504  1504 I SystemServer: StartBackgroundDexOptService
	行  6081: 05-08 18:46:58.525  1504  1504 D SystemServerTiming: StartBackgroundDexOptService took to complete: 0ms
	行  6082: 05-08 18:46:58.525  1504  1504 I SystemServer: StartDynamicCodeLoggingService
	行  6083: 05-08 18:46:58.526  1504  1504 D SystemServerTiming: StartDynamicCodeLoggingService took to complete: 0ms
	行  6084: 05-08 18:46:58.526  1504  1504 I SystemServer: StartPruneInstantAppsJobService
	行  6085: 05-08 18:46:58.526  1504  1504 D SystemServerTiming: StartPruneInstantAppsJobService took to complete: 0ms
	行  6086: 05-08 18:46:58.526  1504  1504 I SystemServer: StartShortcutServiceLifecycle
	行  6088: 05-08 18:46:58.528  1504  1504 D SystemServerTiming: StartShortcutServiceLifecycle took to complete: 2ms
	行  6089: 05-08 18:46:58.528  1504  1504 I SystemServer: StartLauncherAppsService
	行  6091: 05-08 18:46:58.529  1504  1504 D SystemServerTiming: StartLauncherAppsService took to complete: 1ms
	行  6092: 05-08 18:46:58.529  1504  1504 I SystemServer: StartCrossProfileAppsService
	行  6094: 05-08 18:46:58.530  1504  1504 D SystemServerTiming: StartCrossProfileAppsService took to complete: 1ms
	行  6095: 05-08 18:46:58.530  1504  1504 I SystemServer: StartMediaProjectionManager
	行  6098: 05-08 18:46:58.532  1504  1504 D SystemServerTiming: StartMediaProjectionManager took to complete: 2ms
	行  6099: 05-08 18:46:58.532  1504  1504 I SystemServer: StartSliceManagerService
	行  6101: 05-08 18:46:58.534  1504  1504 D SystemServerTiming: StartSliceManagerService took to complete: 2ms
	行  6102: 05-08 18:46:58.534  1504  1504 I SystemServer: StartCameraServiceProxy
	行  6104: 05-08 18:46:58.536  1504  1504 D SystemServerTiming: StartCameraServiceProxy took to complete: 2ms
	行  6105: 05-08 18:46:58.536  1504  1504 I SystemServer: StartStatsCompanionService
	行  6108: 05-08 18:46:58.540  1504  1504 D SystemServerTiming: StartStatsCompanionService took to complete: 4ms
	行  6109: 05-08 18:46:58.540  1504  1504 I SystemServer: StartIncidentCompanionService
	行  6111: 05-08 18:46:58.541  1504  1504 D SystemServerTiming: StartIncidentCompanionService took to complete: 1ms
	行  6112: 05-08 18:46:58.541  1504  1504 I SystemServer: StartMmsService
	行  6114: 05-08 18:46:58.542  1504  1504 D SystemServerTiming: StartMmsService took to complete: 0ms
	行  6115: 05-08 18:46:58.542  1504  1504 I SystemServer: StartAutoFillService
	行  6122: 05-08 18:46:58.546  1504  1504 D SystemServerTiming: StartAutoFillService took to complete: 3ms
	行  6123: 05-08 18:46:58.546  1504  1504 I SystemServer: StartClipboardService
	行  6125: 05-08 18:46:58.547  1504  1504 D SystemServerTiming: StartClipboardService took to complete: 2ms
	行  6126: 05-08 18:46:58.547  1504  1504 I SystemServer: AppServiceManager
	行  6128: 05-08 18:46:58.549  1504  1504 D SystemServerTiming: AppServiceManager took to complete: 1ms
	行  6129: 05-08 18:46:58.549  1504  1504 I SystemServer: MakeVibratorServiceReady
	行  6135: 05-08 18:46:58.550  1504  1504 D SystemServerTiming: MakeVibratorServiceReady took to complete: 2ms
	行  6136: 05-08 18:46:58.550  1504  1504 I SystemServer: MakeLockSettingsServiceReady
	行  6173: 05-08 18:46:58.570  1504  1504 D SystemServerTiming: MakeLockSettingsServiceReady took to complete: 20ms
	行  6174: 05-08 18:46:58.571  1504  1504 I SystemServer: StartBootPhaseLockSettingsReady
	行  6178: 05-08 18:46:58.576  1504  1959 D SystemServerInitThreadPool: Started executing DevicePolicyManager
	行  6179: 05-08 18:46:58.576  1504  1959 D SystemServerInitThreadPool: Finished executing DevicePolicyManager
	行  6180: 05-08 18:46:58.578  1504  1504 D SystemServerTiming: StartBootPhaseLockSettingsReady took to complete: 8ms
	行  6181: 05-08 18:46:58.578  1504  1504 I SystemServer: StartBootPhaseSystemServicesReady
	行  6243: 05-08 18:46:58.635  1504  1504 D SystemServerTiming: StartBootPhaseSystemServicesReady took to complete: 56ms
	行  6244: 05-08 18:46:58.635  1504  1504 I SystemServer: MakeWindowManagerServiceReady
	行  6246: 05-08 18:46:58.642  1504  1504 D SystemServerTiming: MakeWindowManagerServiceReady took to complete: 6ms
	行  6249: 05-08 18:46:58.644  1504  1504 I SystemServer: MakePowerManagerServiceReady
	行  6252: 05-08 18:46:58.657  1504  1504 D SystemServerTiming: MakePowerManagerServiceReady took to complete: 13ms
	行  6253: 05-08 18:46:58.657  1504  1504 I SystemServer: StartPermissionPolicyService
	行  6256: 05-08 18:46:58.666  1504  1504 D SystemServerTiming: StartPermissionPolicyService took to complete: 8ms
	行  6257: 05-08 18:46:58.666  1504  1504 I SystemServer: MakePackageManagerServiceReady
	行  6294: 05-08 18:46:58.704  1504  1504 D SystemServerTiming: MakePackageManagerServiceReady took to complete: 38ms
	行  6295: 05-08 18:46:58.704  1504  1504 I SystemServer: MakeDisplayManagerServiceReady
	行  6298: 05-08 18:46:58.706  1504  1504 D SystemServerTiming: MakeDisplayManagerServiceReady took to complete: 1ms
	行  6300: 05-08 18:46:58.706  1504  1504 I SystemServer: StartDeviceSpecificServices
	行  6301: 05-08 18:46:58.706  1504  1504 D SystemServerTiming: StartDeviceSpecificServices took to complete: 0ms
	行  6302: 05-08 18:46:58.706  1504  1504 I SystemServer: StartBootPhaseDeviceSpecificServicesReady
	行  6304: 05-08 18:46:58.706  1504  1504 D SystemServerTiming: StartBootPhaseDeviceSpecificServicesReady took to complete: 1ms
	行  6361: 05-08 18:46:58.748  1504  1969 D SystemServerTimingAsync: SecondaryZygotePreload took to complete: 813ms
	行  6362: 05-08 18:46:58.748  1504  1969 D SystemServerInitThreadPool: Finished executing SecondaryZygotePreload
	行  6364: 05-08 18:46:58.787  1504  1504 I SystemServer: Making services ready
	行  6365: 05-08 18:46:58.787  1504  1504 I SystemServer: StartActivityManagerReadyPhase
	行  6526: 05-08 18:46:58.978  1504  1504 D SystemServerTiming: StartActivityManagerReadyPhase took to complete: 191ms
	行  6527: 05-08 18:46:58.978  1504  1504 I SystemServer: StartObservingNativeCrashes
	行  6528: 05-08 18:46:58.979  1504  1504 D SystemServerTiming: StartObservingNativeCrashes took to complete: 0ms
	行  6532: 05-08 18:46:58.979  1504  1504 I SystemServer: StartSystemUI
	行  6533: 05-08 18:46:58.979  1504  1970 D SystemServerInitThreadPool: Started executing WebViewFactoryPreparation
	行  6534: 05-08 18:46:58.979  1504  1970 I SystemServer: WebViewFactoryPreparation
	行  6548: 05-08 18:46:58.992  1504  1970 D SystemServerTimingAsync: WebViewFactoryPreparation took to complete: 14ms
	行  6549: 05-08 18:46:58.992  1504  1970 D SystemServerInitThreadPool: Finished executing WebViewFactoryPreparation
	行  6557: 05-08 18:46:58.993  1504  1504 D SystemServerTiming: StartSystemUI took to complete: 15ms
	行  6558: 05-08 18:46:58.993  1504  1504 I SystemServer: MakeNetworkManagementServiceReady
	行  6561: 05-08 18:46:58.999  1504  1504 D SystemServerTiming: MakeNetworkManagementServiceReady took to complete: 5ms
	行  6562: 05-08 18:46:58.999  1504  1504 I SystemServer: MakeIpSecServiceReady
	行  6566: 05-08 18:46:59.000  1504  1504 D SystemServerTiming: MakeIpSecServiceReady took to complete: 1ms
	行  6567: 05-08 18:46:59.000  1504  1504 I SystemServer: MakeNetworkStatsServiceReady
	行  6582: 05-08 18:46:59.028  1504  1504 D SystemServerTiming: MakeNetworkStatsServiceReady took to complete: 29ms
	行  6583: 05-08 18:46:59.028  1504  1504 I SystemServer: MakeConnectivityServiceReady
	行  6600: 05-08 18:46:59.040  1504  1504 D SystemServerTiming: MakeConnectivityServiceReady took to complete: 11ms
	行  6601: 05-08 18:46:59.040  1504  1504 I SystemServer: MakeNetworkPolicyServiceReady
	行  6602: 05-08 18:46:59.041  1504  1504 D SystemServerTiming: MakeNetworkPolicyServiceReady took to complete: 0ms
	行  6603: 05-08 18:46:59.041  1504  1504 I SystemServer: PhaseThirdPartyAppsCanStart
	行  6652: 05-08 18:46:59.093  1504  1504 D SystemServerTiming: PhaseThirdPartyAppsCanStart took to complete: 53ms
	行  6653: 05-08 18:46:59.094  1504  1504 I SystemServer: StartNetworkStack
	行  6662: 05-08 18:46:59.099  1504  1504 D SystemServerTiming: StartNetworkStack took to complete: 5ms
	行  6663: 05-08 18:46:59.099  1504  1504 I SystemServer: MakeLocationServiceReady
	行  6714: 05-08 18:46:59.131  1504  1504 D SystemServerTiming: MakeLocationServiceReady took to complete: 32ms
	行  6715: 05-08 18:46:59.131  1504  1504 I SystemServer: MakeCountryDetectionServiceReady
	行  6717: 05-08 18:46:59.131  1504  1504 D SystemServerTiming: MakeCountryDetectionServiceReady took to complete: 0ms
	行  6719: 05-08 18:46:59.132  1504  1504 I SystemServer: MakeNetworkTimeUpdateReady
	行  6727: 05-08 18:46:59.134  1504  1504 D SystemServerTiming: MakeNetworkTimeUpdateReady took to complete: 3ms
	行  6729: 05-08 18:46:59.135  1504  1504 I SystemServer: MakeInputManagerServiceReady
	行  6733: 05-08 18:46:59.136  1504  1504 D SystemServerTiming: MakeInputManagerServiceReady took to complete: 1ms
	行  6734: 05-08 18:46:59.136  1504  1504 I SystemServer: MakeTelephonyRegistryReady
	行  6738: 05-08 18:46:59.137  1504  1504 D SystemServerTiming: MakeTelephonyRegistryReady took to complete: 1ms
	行  6740: 05-08 18:46:59.137  1504  1504 I SystemServer: MakeMediaRouterServiceReady
	行  6742: 05-08 18:46:59.137  1504  1504 D SystemServerTiming: MakeMediaRouterServiceReady took to complete: 0ms
	行  6743: 05-08 18:46:59.137  1504  1504 I SystemServer: MakeMmsServiceReady
	行  6746: 05-08 18:46:59.138  1504  1504 D SystemServerTiming: MakeMmsServiceReady took to complete: 0ms
	行  6747: 05-08 18:46:59.139  1504  1504 I SystemServer: IncidentDaemonReady
	行  6754: 05-08 18:46:59.142  1504  1504 D SystemServerTiming: IncidentDaemonReady took to complete: 4ms
	行  7016: 05-08 18:46:59.381  1504  1504 D SystemServerTiming: ActivityManagerStartApps took to complete: 238ms
	行  7017: 05-08 18:46:59.381  1504  1504 D SystemServerTiming: PhaseActivityManagerReady took to complete: 674ms
	行  7027: 05-08 18:46:59.383  1504  1504 D SystemServerInitThreadPool: Shutdown successful
	行  7029: 05-08 18:46:59.383  1504  1504 D SystemServerTiming: StartServices took to complete: 4751ms
	行 13520: 05-08 18:47:03.030  1504  1648 D SystemServerTiming: SystemUserUnlock took to complete: 945ms

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1795959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言数据结构(超详细讲解)| 二叉树的实现

二叉树 引言 在计算机科学中&#xff0c;数据结构是算法设计的基石&#xff0c;而二叉树&#xff08;Binary Tree&#xff09;作为一种基础且广泛应用的数据结构&#xff0c;具有重要的地位。无论是在数据库索引、内存管理&#xff0c;还是在编译器实现中&#xff0c;二叉树都…

springboot 社区疫苗管理网站系统-计算机毕业设计源码89484

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 社区疫苗管理网站系统&#xff0c;主要的模块包括查看首页、网站管理&#xff08;轮播图、公告信息&#xff09;人员管理&#xff08;管理员、…

Liunx音频

一. echo -e "\a" echo 通过向控制台喇叭设备发送字符来发声&#xff1a; echo -e "\a"&#xff08;这里的 -e 选项允许解释反斜杠转义的字符&#xff0c;而 \a 是一个响铃(bell)字符&#xff09; 二. beep 下载对应的包 yum -y install beep 发声命令 be…

金融创新浪潮下的拆分盘投资探索

随着数字化时代的步伐加速&#xff0c;金融领域正经历着前所未有的变革。在众多金融创新中&#xff0c;拆分盘作为一种新兴的投资模式&#xff0c;以其独特的增长机制&#xff0c;吸引了投资者的广泛关注。本文将对拆分盘的投资逻辑进行深入剖析&#xff0c;并结合具体案例&…

TikTok广告投放攻略——广告类型详解

TikTok广告是品牌或创作者付费向特定目标受众展示的推广内容&#xff08;通常是全屏视频&#xff09;。TikTok 上的广告是一种社交媒体营销形式&#xff0c;通常旨在提高广告商的知名度或销售特定产品或服务。 就 TikTok广告投放而言&#xff0c;其组织层级分为三个层级&#x…

【SpringBoot + Vue 尚庭公寓实战】项目初始化准备(二)

尚庭公寓SpringBoot Vue 项目实战】项目初始化准备&#xff08;二&#xff09; 文章目录 尚庭公寓SpringBoot Vue 项目实战】项目初始化准备&#xff08;二&#xff09;1、导入数据库2、创建工程3、项目初始配置3.1、SpringBoot依赖配置3.2、创建application.yml文件3.3、创建…

RabbitMQ(五)集群配置、Management UI

文章目录 一、安装RabbitMQ1、前置要求2、安装docker版复制第一个节点的.erlang.cookie进入各节点命令行配置集群检查集群状态 3、三台组合集群安装版rabbitmq节点rabbitmq-node2节点rabbitmq-node3节点 二、负载均衡&#xff1a;Management UI1、说明2、安装HAProxy3、修改配置…

代码随想录算法训练营第四十六 | ● 139.单词拆分 ● 关于多重背包,你该了解这些! ● 背包问题总结篇!

139.单词拆分 视频讲解&#xff1a;https://www.bilibili.com/video/BV1pd4y147Rh https://programmercarl.com/0139.%E5%8D%95%E8%AF%8D%E6%8B%86%E5%88%86.html class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<st…

springboot vue 开源 会员收银系统 (6) 收银台的搭建

前言 完整版演示 前面我们对会员系统 分类和商品的开发 完成了收银所需的基础信息 下面我们开始完成收银台的开发 简单画了一个收银的流程图大家参考下 从这张图我们可以分析一下几点 可以选择会员或散客收银选择会员使用相应的会员价结算使用会员卡则在价格基础根据卡折扣…

sql server:数据库处于单用户模式,当前某个用户已与其连接

在 SQL Server 中&#xff0c;数据库可以设置为不同的用户模式&#xff0c;以便根据需要限制对数据库的访问。单用户模式&#xff08;Single-User Mode&#xff09;是其中一种模式&#xff0c;它限制了对数据库的访问&#xff0c;使得一次只能有一个用户连接到数据库。 单用户…

七月份大理站、ACM独立出版、高录用稳检索,2024年云计算与大数据国际学术会议(ICCBD 2024)

【ACM独立出版 | 高录用 | EI核心检索稳定】 2024年云计算与大数据国际学术会议&#xff08;ICCBD 2024) 2024 International Conference on Cloud Computing and Big Data (ICCBD 2024) 一、重要信息 大会官网&#xff1a;www.iccbd.net &#xff08;点击投稿/参会/了解会…

Vue2项目错误提示:Vue: <template v-for> key should be placed on the <template> tag.

1. 场景还原 升级了最新的Webstorm后打开Vue2项目提示以下波浪线错误&#xff1a; Vue: <template v-for> key should be placed on the <template> tag. 该错误不会影响正常运行和构建&#xff0c;但我们看到了会不舒服。 2. 错误原因 Vue2中key不能放在temp…

[数据集][图像分类]城市异常情况路边倒树火灾水灾交通事故分类数据集15223张8类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;15223 分类类别数&#xff1a;8 类别名称:[“badroad”,“fallentree”,“f…

四、 【源码】数据源的解析、创建和使用

源码地址&#xff1a;https://github.com/mybatis/mybatis-3/ 仓库地址&#xff1a;https://gitcode.net/qq_42665745/mybatis/-/tree/04-datasource-use 数据源的解析、创建和使用 流程&#xff1a; 1.Resources加载MyBatis配置文件生成Reader字符流 2.SqlSessionFactory…

[ZJCTF 2019]NiZhuanSiWei、[HUBUCTF 2022 新生赛]checkin、[SWPUCTF 2021 新生赛]pop

目录 [ZJCTF 2019]NiZhuanSiWei [HUBUCTF 2022 新生赛]checkin 1.PHP 关联数组 PHP 数组 | 菜鸟教程 2.PHP 弱比较绕过 PHP 类型比较 | 菜鸟教程 [SWPUCTF 2021 新生赛]pop [ZJCTF 2019]NiZhuanSiWei BUUCTF [ZJCTF 2019]NiZhuanSiWei特详解&#xff08;php伪…

推荐个 Edge/Chrome/Firefox 都支持的 IP 定位查询扩展

作为一个博客站长&#xff0c;对 IP 地址应该都不陌生&#xff0c;可以说是跟站长的工作是息息相关的&#xff0c;反正明月几乎每天都会面临 IP 查询、定位的需要&#xff0c;今天让明月给找到了一个叫”IP 定位查询“的浏览器扩展&#xff0c;在 Edge 和 Firefox 下体验后感觉…

新奇css模板

引言 (csscoco.com)https://csscoco.com/inspiration/#/./init 可视化集合 (hepengwei.cn)http://hepengwei.cn/#/html/visualDesign 30 秒代码 (30secondsofcode.org)https://www.30secondsofcode.org/ Animate.css |CSS动画的跨浏览器库。https://animate.style/

springboot+vue+mybatis房屋租贷系统+PPT+论文+讲解+售后

本论文系统地描绘了整个网上房屋租赁系统的设计与实现&#xff0c;主要实现的功能有以下几点&#xff1a;管理员&#xff1b;首页、个人中心、房屋类型管理、房屋租赁管理、会员管理、订单信息管理、合同信息管理、退房评价管理、管理员管理&#xff0c;系统管理&#xff0c;前…

基于SSM前后端分离版本的论坛系统-自动化测试

目录 前言 一、测试环境 二、环境部署 三、测试用例 四、执行测试 4.1、公共类设计 创建浏览器驱动对象 测试套件 释放驱动类 4.2、功能测试 注册页面 登录页面 版块 帖子 用户个人中心页 站内信 4.3、界面测试 注册页面 登录页面 版块 帖子 用户个人中心页…

【Python】教你彻底了解 Python中的文件处理

​​​​ 文章目录 一、文件的打开与关闭1. 打开文件2. 关闭文件3. 文件模式 二、文件的读写操作1. 读取文件内容2. 写入文件内容 三、使用上下文管理器四、异常处理五、二进制文件操作1. 读取二进制文件2. 写入二进制文件 六、实际应用示例1. 处理CSV文件2. 处理JSON文件 结论…