cling的异步操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cling的异步操作相关的知识,希望对你有一定的参考价值。

 

cling 2.x API看上去只改了包名和个别类名但却已经完整支持了异步操作。下面的片段验证了一个异步过程,android程序调用远程UPnP设备(PC Windows MediaPlayer媒体渲染器)的AVTransort服务执行一个Seek操作。手机和PC均连接家用局域网

技术分享

上图代码中refUpnpService是的UPnP协议栈,refDevAVT是远程设备的AVTransport服务,act是一个Seek。

Seek成功与否的信息返回封装在了act的回掉中,如下图的代码

技术分享

附注

1,cling为什么把Seek等一些class封装在support库里,因为Seek包含一些DLNA层面的数据解析,而cling core主要是UPnP。

2,另外为什么复杂不可预料的网络操作没有 "time out" 返回项,因为UPnP协议规范处理了网络异常,这个状况列为failure而且有详细信息。

 

在执行Seek之前有一句"before seek",执行玩Seek之后有一句"after seek",操作的结果的会有一句"seek succeeded"或"seek failed"

同步的话log信息将是:"before seek" ->(调用线程阻赛直到操作完成)"seek succeeded" 或 "seek failed" -> "after seek"

异步的话log信息将是:"before seek" ->(调用线程不阻赛直接返回)"after seek"->"seek succeeded" 或 "seek failed"

 

下面是Android程序的UI操作SeekBar(松开后执行一次Seek),通过UPnP将远程媒体渲染器Windows MediaPlayer的时间跳到02:05,远程渲染器响应了请求Seek到02:05

技术分享

技术分享

Android Studio的Log信息指明cling库已经做了异步处理,即调用Seek后直接返回,100多毫秒后服务器返回Seek成功。

技术分享

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于cling的异步操作的主要内容,如果未能解决你的问题,请参考以下文章

线程与异步

Javascript async异步操作库简介

Android 应用内计费:无法启动异步操作,因为另一个异步操作(正在进行中)

Redux-thunk 异步操作:使用自定义中间件进行异步操作

正确使用异步操作

获取 异步执行调用的结果