背景客服一站式工作台包含了在线、电话、工单和工具类四大功能模块。其中很多通用的模块,比如工单详情、订单详情都是通过iframe的形式嵌套的,在系统加载过程中会比较耗时,再加上在线消息通信模块强依赖tinode第三方SDK,很多方法都是直接调用tinode提供的API,同时也继承了tinode很多不合理的方式,从使用tinode到目前为止,因迭代资源的投入,一直没有对tinode源码做一些优化和改进,当消息通信的模式改成广播之后,会话卡顿问题就暴露出来了。通过对tinode源码消息链路模块的阅读,发现了有不少的优化空间,本文则是针对消息链路这块阐述的具体优化实现。发现问题2.1消息数据处理流程存
背景客服一站式工作台包含了在线、电话、工单和工具类四大功能模块。其中很多通用的模块,比如工单详情、订单详情都是通过iframe的形式嵌套的,在系统加载过程中会比较耗时,再加上在线消息通信模块强依赖tinode第三方SDK,很多方法都是直接调用tinode提供的API,同时也继承了tinode很多不合理的方式,从使用tinode到目前为止,因迭代资源的投入,一直没有对tinode源码做一些优化和改进,当消息通信的模式改成广播之后,会话卡顿问题就暴露出来了。通过对tinode源码消息链路模块的阅读,发现了有不少的优化空间,本文则是针对消息链路这块阐述的具体优化实现。发现问题2.1消息数据处理流程存
ScrollView和RecyclerView都是滑动组件,因此存在滑动事件冲突问题,解决思路就是在事件分发函数中将其中下层View的滑动事件做拦截处理布局示例代码如下:注意:在布局中包裹一层RelativeLayout,并且加上这个属性android:descendantFocusability="blocksDescendants"blocksDescendants这个属性的官方解释是viewgroup会覆盖子类控件而直接获得焦点继承ScrollView类自定义ScrollViewimportandroid.annotation.TargetApi;importandroid.conten
ScrollView和RecyclerView都是滑动组件,因此存在滑动事件冲突问题,解决思路就是在事件分发函数中将其中下层View的滑动事件做拦截处理布局示例代码如下:注意:在布局中包裹一层RelativeLayout,并且加上这个属性android:descendantFocusability="blocksDescendants"blocksDescendants这个属性的官方解释是viewgroup会覆盖子类控件而直接获得焦点继承ScrollView类自定义ScrollViewimportandroid.annotation.TargetApi;importandroid.conten
记录一次RecyclerView卡顿案例和解决方案。需求:界面由两部分组成,顶部一个图片,图片下面是列表。在列表滑动时,图片跟着滑动。实现:NestedScrollView[LinearLayout[ImageView,RecyclerView]]。结果:当数据量较大时,RecyclerView会越划越卡。原因:NestedScrollView嵌套RecyclerView,NestedScrollView的MeasureSpec.UNSPECIFIED测量子View,导致RecyclerView高度不确定,有多少item就会创建多少个ViewHolder,导致RecyclerView的复用机制
记录一次RecyclerView卡顿案例和解决方案。需求:界面由两部分组成,顶部一个图片,图片下面是列表。在列表滑动时,图片跟着滑动。实现:NestedScrollView[LinearLayout[ImageView,RecyclerView]]。结果:当数据量较大时,RecyclerView会越划越卡。原因:NestedScrollView嵌套RecyclerView,NestedScrollView的MeasureSpec.UNSPECIFIED测量子View,导致RecyclerView高度不确定,有多少item就会创建多少个ViewHolder,导致RecyclerView的复用机制
和你一起终身学习,这里是程序员Android经典好文推荐,通过阅读本文,您将收获以下知识点:一、美颜相机录制视频trace分析概览二、CameraFWK与cameraHAL录像交互三、美颜相机app与SurfaceFlinger交互四、美颜相机卡顿丢帧trace分析一、美颜相机录制视频trace分析概览美颜相机录制视频trace分析概览截取1s内美颜相机帧率为30fps,对应的CameraHAL、CameraFWK、美颜相机App的帧率如上二、CameraFWK与cameraHAL录像交互CameraFWK与cameraHAL录像交互CameraFWK与cameraHAL录像交互CameraF
和你一起终身学习,这里是程序员Android经典好文推荐,通过阅读本文,您将收获以下知识点:一、美颜相机录制视频trace分析概览二、CameraFWK与cameraHAL录像交互三、美颜相机app与SurfaceFlinger交互四、美颜相机卡顿丢帧trace分析一、美颜相机录制视频trace分析概览美颜相机录制视频trace分析概览截取1s内美颜相机帧率为30fps,对应的CameraHAL、CameraFWK、美颜相机App的帧率如上二、CameraFWK与cameraHAL录像交互CameraFWK与cameraHAL录像交互CameraFWK与cameraHAL录像交互CameraF
一、卡顿问题的几种原因复杂UI、图文混排的绘制量过大;在主线程上做网络同步请求;在主线程做大量的IO操作;运算量过大,CPU持续高占用;死锁和主子线程抢锁。二、监测卡顿的思路监测FPS:FPS是一秒显示的帧数,也就是一秒内画面变化数量。如果按照动画片来说,动画片的FPS就是24,是达不到60满帧的。也就是说,对于动画片来说,24帧时虽然没有60帧时流畅,但也已经是连贯的了,所以并不能说24帧时就算是卡住了。由此可见,简单地通过监视FPS是很难确定是否会出现卡顿问题了,所以我就果断弃了通过监视FPS来监控卡顿的方案。RunLoop:通过监控RunLoop的状态来判断是否会出现卡顿。RunLoop
一、卡顿问题的几种原因复杂UI、图文混排的绘制量过大;在主线程上做网络同步请求;在主线程做大量的IO操作;运算量过大,CPU持续高占用;死锁和主子线程抢锁。二、监测卡顿的思路监测FPS:FPS是一秒显示的帧数,也就是一秒内画面变化数量。如果按照动画片来说,动画片的FPS就是24,是达不到60满帧的。也就是说,对于动画片来说,24帧时虽然没有60帧时流畅,但也已经是连贯的了,所以并不能说24帧时就算是卡住了。由此可见,简单地通过监视FPS是很难确定是否会出现卡顿问题了,所以我就果断弃了通过监视FPS来监控卡顿的方案。RunLoop:通过监控RunLoop的状态来判断是否会出现卡顿。RunLoop