背景
以下内容基于Android P code。
首先,我认为冷启动最常用的策略SplashScreenSurface不适合通话界面,所以我们只能用常归的界面启动优化方式。
界面启动流程
先概括一下拨号时界面显示的流程,如下:
InCallUI的具体步骤,如下:
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的一些接口在某些时候是非常耗时的,尽量放到单独线程。
原创内容欢迎转载,但请注明出处,谢谢!