Android 如何将定制的 Lau ncher 成为系统中唯一的 Lau ncher 2011-01-17 11:12 如果你要定制一个 Android 系统,你想用你自己的 Launcher(Home)作主界面来替换 Android 自己的 Home你的 Launcher. 我们可以通过修改 Framework 来实现这样的功能。 这里以 Android2.1 的源代码为例来实际说明。 1)首先了解一下 Android 的启动过程。 Android 系统的启动先从 Zygote 开始启动,然后……(中间的过程就不说了)…..一直到了 SystemServer(fram /** * This method is called from Zygote to initialize the system. This will cause the native * services (SurfaceFlinger, AudioFlinger, etc..) to be started. After that it will call back * up into init2() to start the Android services. */ native public static void init1(String[] args); public static void main(String[] args) { if (SamplingProfilerIntegration.isEnabled()) { SamplingProfilerIntegration.start(); timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { SamplingProfilerIntegration.writeSnapshot(“system_server”); } }, SNAPSHOT_INTERVAL, SNAPSHOT_INTERVAL); } // The system server has to run all of the time, so it needs to be // as efficient as possible with its memory usage. VMRuntime.getRuntime().setTargetHeapUtilization(0.8f); System.loadLibrary(“android_servers”); init1(args); } public static final void init2() { Log.i(TAG, “Entered the Android system server!”); Thread thr = new ServerThread(); thr.setName(“android.server.ServerThread”); thr.start(); } } 从 SystemServer 的 main 函数开始启动各种服务。 首先启动 init1,然后启动 init2. 从上面的注释可以看到:init1 这个方法时被 Zygote 调用来初始化系统的,init1 会启动 native 的服务如 Surf完以后会回调 init2 来启动 Android 的 service。 这里我们主要来关注 init2 的过程。 init2 中启动 ServerThread 线程, ServerThread 中启动了一系列的服务,比如这些: ActivityManagerService EntropyService PowerMana...