以下内容基于Android P code。

首先,我认为冷启动最常用的策略SplashScreenSurface不适合通话界面,所以我们只能用常归的界面启动优化方式。

先概括一下拨号时界面显示的流程,如下:

2fe1c2c276f1

MO 界面显示流程

InCallUI的具体步骤,如下:

2fe1c2c276f1

MO InCallUI

telecom的具体步骤如下:

2fe1c2c276f1

MO Telecom

从流程中,我们可以看到可以提升启动速度的方法有:

1. Android Profile查看耗时方法。比如PhoneNumberUtils#isEmergencyNumber()耗时,而telecom调用的次数也多,可以缓存结果减少调用次数。

2. 有序广播非常耗时,如果没有特别需求,可以先直接拨号再发广播。

3. 号码归属地的查询只需用到号码,所以可以移到创建CallerInfo时就开启工作线程处理。

4. 拨号盘拨号时把查询出来的联系人名字等信息封装在intent的extra中,incallui直接取出来用。

5. bindService时把拨号盘附在intent extra中的信息传给InCallUI,通过此构建PrimaryInfo先显示在界面上。

6. UI Layout要简洁,层次低,比如用SpannableString。不常用到的View用ViewStub,需要时再加载。

7. 音频相关操作,AudioManager、Ringtone、Vibrator的一些接口在某些时候是非常耗时的,尽量放到单独线程。

原创内容欢迎转载,但请注明出处,谢谢!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐