直播间聊天消息列表,直播间RecyclerView。采用3层缓存机制,一秒内收到几百条消息依然不卡顿。
如0.5秒只触发一次notify
如0.5秒收到超过10条就丢弃了
用户体验细节
并解耦出来,用在你的聊天界面也可以
我自己写的控件
第一层缓存:消息的标签ImageSpan缓存,比如"榜1" "等级" "粉丝团等级"<bar />
第二层缓存:收到消息时候,检查上次刷新时间。如果刚上次刚刷新不到0.n秒,那么就插入到缓冲区。0.n秒后将全部缓冲区显示出来再清空缓冲区<bar />
第三层缓存:model中的SpannableString。让用户手指滚动列表更顺畅,无需再次解析SpannableString<bar />
额外缓存:解析标签ImageSpan时候全程只采用一个TextView,避免每次都new,json解析也是如此
异步解析:解析完整的(昵称前有3个标签)SpannableString在低性能手机上最慢需要20-40ms。会造成丢帧。本库采用HandlerThread解析<bar />
提供策略模式解析标签ImageSpan,拓展性极强
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.QDong415:QLiveMessageHelper:v1.0'
}
//给我们的库 liveMessageRecyclerHelper,绑定recyclerView
liveMessageRecyclerHelper.setRecyclerView(recyclerView)
liveMessageRecyclerHelper.setUnreadTipsView(unreadTipsTextView)
liveMessageRecyclerHelper.messageRecyclerHelperListener = object: LiveMessageRecyclerHelper.LiveMessageRecyclerHelperListener<LiveMessageModel> {
override fun unreadMessageCountUpdate(unreadCount: Int) {
unreadTipsTextView.setText("还有"+unreadCount +"条未读")
}
override fun asyncParseSpannableString(model: LiveMessageModel) {
//这一步是在子线程中
model.spannableString = liveMessageTextViewHelper.displaySpannableString(model)
}
}
//RecyclerView最短刷新时间间隔(0秒 - 2.0秒)
liveMessageRecyclerHelper.diffRefreshDuration = (intent.getFloatExtra("minRefreshTime",0.6f) * 1000).toLong()
我的其他开源库,给个Star鼓励我写更多好库:
Android 仿大众点评、仿小红书 下拉拖拽关闭Activity
Android 直播间聊天消息列表RecyclerView。一秒内收到几百条消息依然不卡顿
Android 仿快手直播界面加载中,顶部的滚动条状LoadingView
Kotlin MVVM框架,全世界最优化的分页加载接口、最接地气的封装