1 / 9 深入浅出- Android系统移植与平台开发(六) - 为 Android启动加速作者:唐老师 , 华清远见嵌入式学院 讲师。Android 的启动速度一直以来是他的诟病,虽然现在Android 设备的硬件速度越来越快,但是随着新版本的出现,其启动速度一直都比较慢, 当然,作为程序员, 我们是可以理解的, 智能手机本身就要启动很多服务来支持应用的功能,并且 Android 系统大部分还是使用的Java 语言编写的, 必然要运行在 Java 虚拟机里, 这也决定了它运行速度和启动速度都相对较慢。同时, Android 系统为了在执行用户应用程序时提高用户体验,还做了一些预加载机制,这也牺牲了开机启动时间。根据 Android 启动过程的分析可知,我们可以进行定制加速如下: ? 定制本地服务 ? 定制 Android 系统服务 ? 优化 ZygoteInit 的类预加载 preloadClasses 和资源预加载 preloadResources机制 ?PackageManagerService扫描、检查 APK 安装包信息下面我们依次来分析其实现步骤。1. 定制本地服务由第二章,第 2 节可知,本地服务都是由C 或 C++编写,它们都执行在Linux 空间,在 init 进程的启动过程中启动了很多本地服务,如果我们的设备中没有电话模块、蓝牙模块,我们可以将这些没用的本地服务在init.rc 里注释掉。[cpp] view plaincopyprint? 1. 396 #service ril-daemon /system/bin/rild 2. 397# class main 3. 398# socket rild stream 660 root radio 4. 399# socket rild-debug stream 660 radio system 5. 400# user root 6. 401# group radio cache inet misc audio sdcard_rw log 7. 8. 435 service dbus /system/bin/dbus-daemon --system --nofork 9. 436 class main 10. 437 # socket dbus stream 660 bluetooth bluetooth 11. 438 user bluetooth 12. 439 group bluetooth net_bt_admin 13. 14. 441 #service bluetoothd /system/bin/bluetoothd -n 15. 442 # class main 16. 443 # socket bluetooth stream 660 bluetooth bluetooth 17. 444 # socket dbus_bluetooth stream 660 bluetooth bluetooth 18. 445 # init.rc does not yet support applying capabilities, so run as root and 2 / 9 19. 446 # let bluetoothd drop uid to bluetooth with the r...