背景:sdk初始化的时候耗时过长,而sdk,init方法中只有一个bindservice及一些变量的初始化,却好事100ms


查看trace发现binderservice耗时只占init耗时的一小部分,但是init逻辑并没有其他代码。
这里servicebind返回快的另一原因是service已经被其他进程绑定过了,无需耗时在service.onbinded()回调中创建stub对象
1. 查看binderservice代码发现bindservice如果不传入excutor参数会在主线程回调connection.onserviceconnected()

2.怀疑在应用启动的时候,主线程繁忙导致分配不到时间片,接着查看trace验证

ap主线程调度到了cpu 7超大核进程冷启动 ,但是在init阶段cpu 7一直处于繁忙状态导致没有分配时间片给init,导致sdk初始化慢。
解决办法:
bindservice传递excutor参数,回调在子线程
文章讨论了SDK初始化时耗时过长的问题,主要集中在主线程的bindservice操作上。由于主线程在应用启动初期繁忙,导致服务连接回调在主线程执行,引发延迟。解决方法是通过传递Executor参数,将回调移到子线程,从而提高初始化速度。
2382

被折叠的 条评论
为什么被折叠?



