Android支持单词提示搜索框的网络请求策略

在Android应用中,为了提供实时的搜索提示,文章介绍了如何优化网络请求策略。从最初的每次输入触发请求,导致高并发和延迟,到定时器方案减少服务器压力,再到500ms等待延迟发送请求,最后采用Android Handler优化线程和同步问题,逐步提升用户体验并减轻服务器负担。代码示例展示了如何实现这种优化。
摘要由CSDN通过智能技术生成

项目里有这么一个需求,如果用户进入一个搜索页面,页面顶端有一个搜索框,用户在输入的同时,底下同步的展示相关搜索建议。大约是这个样子:


大体逻辑如下:

实现功能:在输入的同时根据输入的文字立即给出结果,服务器端使用solaris做内存上的缓存。

关键地方在于:

1、用户输入完毕之后要尽可能快的响应

2、尽可能的为搜索服务器降低压力

3、将网络带宽资源最大化的用在用户真正需要的搜索结果上

注:本文只讨论客户端的优化,服务器搜索优化暂不涉及

这个功能出现了很久,直到最近才开始修改,并且连改三个版本

第一版:监听EditTextView的TextChanged事件,每次当用户在搜索框输入或者删除一个字符,就用当前输入框里的文字发起一次搜索请求,并在请求结束后的回调函数中,判断之前请求的文字和当前输入框里文字是否相同,如果相同就显示

优点:实时性强,用户输入完毕之后立刻发出请求,不需等待

缺点:由于http请求线程池有限,允许的并发量很小,也许新请求的关键字需要排队,也就是等之前关键字搜索完毕之后再进行请求,实际上用户等待的时间会很长。并且给搜索服务器带来了极大的压力


第二版:设置一个定时器,每1.5s检测一下搜索框中的内容,如果内容发生改变,就发起一次Http请求,并通过OkHttp将之前全部的关键字请求都取消掉,减少并发。

优点:减少了并发Http请求的队列等待,为服务器减少了压力

缺点:1.5秒的扫描间隔比较长,用户需要多付出无谓的1.5s等待时间,极大的降低了用户体验


第三版:启动一个子线程进行维护,用户每输入一个字母后等待500ms,如果500ms内用户没有输入其他字符,就搜索当前搜索框里的文字,如果500ms以内用户又继续输入了文字,就重新开始500ms的等待


第四版

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值