背景
在app开发过程中,实现polling逻辑也是很常见的。当然在移动端应用使用polling处理会影响应用的性能。比如polling处理增加了网络请求的次数,服务端压力增加。polling处理也消耗了更多的网络流量。但是应用polling的场景还是有的。有时是否选择polling要考虑很多综合的因素,比如我们可以使用长连接替代polling,但是长连接在服务端和客户端的开发成本相对要更高些,如果polling只是实现类似的跟帖等功能,我们完全可以使用polling实现,而不是选择代价更高的长连接方案。下面会分使用flow和不使用flow两种方式实现polling并对比两种方式的优缺点。
不使用flow
我们使用线程处理polling请求,首先我们定义了一个polling thread。
class PollingThread: Thread() {
override fun run() {
var successBlock : (PollingData)->Unit = {
Log.d("PollingThread","successBlock $it")
}
var failBlock:(Exception)->Unit ={
Log.d("PollingThread","failBlock $it")
}
while (isInterrupted) {
pollingApi.call(successBlock, failBlock)
Thread.sleep(5000)
}
}