深入浅出 - Android系统移植与平台开发(六)- 为Android启动加速

本文深入探讨了如何通过定制本地服务、Android系统服务以及优化PackageManagerService来提升Android系统的启动速度。作者指出,去掉未使用的本地服务如ril-daemon和dbus等对启动时间影响不大,但能略微提升整体性能。移除开机动画服务能显著加快启动速度。文章还讨论了Android系统服务如EntropyService、PowerManagerService等43项核心服务,并指出减少APK数量和关闭开机动画是提高启动速度的有效方法。最后提到了企业级定制Android系统的方法,包括自定义启动Intent和编写替代Launcher的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:唐老师,华清远见嵌入式学院讲师。

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
                        19. 446        # let bluetoothd drop uid to bluetooth with the right linux capabilities
                        20. 447 #        group bluetooth net_bt_admin misc
                        21. 448 #        disabled

重新编译system.img然后启动模拟器即可。

笔者做了对比,去掉上述几个本地服务与没有去掉本地服务,二者在开机时间上几乎没有减少多少,这也可以理解,因为本地服务就是几个程序,少执行和多执行几个程序对于总体开机时间没有多大影响,不过,去掉没有使用的本地服务,对整个系统性能来说,会有微不足道的提升。

如果去掉开机动画服务可以大大的提高系统的启动速度:

[cpp] view plaincopyprint?

                        1. 433 #service bootanim /system/bin/bootanimation
                        2. 434 #        class main
                        3. 435 #        user graphics
 &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值