故障复盘记录
1.新增回调事件引发的空指针异常
场景:比如给弹出广告事件增加回调,暴露出去一个setAdvertiseMentListener(AdvertiseMentListener);方法。然后在sdk对外暴露的接口类中,新增私有set和get方法,然后再sdk内部合适的地方来调用get方法将事件回调出去,
复现:用户如果没有调用设置监听的方法,然后sdk内部回调事件触发的时候去调用get方法来获取监听进行回调会触发空指针。
2.sdk对外提供的接口返回值如果是耗时操作,采用callback的方式进行回调,避免同步处理引起的线程阻塞及资源占用情况
例子:给地图图商提供众包截图服务,就是收到图商apk截取制定时间图片的指令后,到本地的视频中找到该帧图片进行抽帧,然后编码成jpg后返回。之前未考虑到同时接收大量截图指令的场景,采用同步的方式进行处理发现接口返回速度越来越慢,系统cpu和内存占用也逐渐增加,后续采用异步回调+队列的方式提供图片情况得到一定缓解。
3.回调事件引发的空指针
调用方传一个null作为listener调用接口,sdk内部如果没有做判空会触发空指针
4.提供进程间通信客户端sdk没有重连机制导致的异常
1.本身作为一个服务端的apk,开发一个sdk给到客户端集成后,该客户端便有了与本身app通信的能力
2.正常是服务端app先启动,客户端在启动,然后与服务端建立通信连接
3.如果此时服务端因异常崩了并重新启动,此时客户端如果没有重连机制便无法立即建立连接
4.只需要在每个接口方法起始处做是否连接异常的判断,及时的重新bindservice即可