DSBridge实例-在网页中展示Native进度

DSBridge是一款简单易用的跨平台javascriptbridge,支持iOS/Android。本文介绍其2.0版本新增的“多次返回”功能,即允许native在一次调用过程中多次向JS返回数据。通过具体示例,展示如何在网页上实时更新文件下载进度。
部署运行你感兴趣的模型镜像

DSBridge是目前地球上使用最简单并且支持同步调用的跨平台(IOS/Android)javascript bridge(native和js的桥梁),DSBridge 2.0更新之后,支持了“native多次返回”,极大的方便了js调用native方法时,natvie需要多次向js返回数据的场景。

先贴出DSBridge github地址

DSBridge-IOS:github.com/wendux/DSBr…

DSBridge-Android:[github.com/wendux/DSBr…

“多次返回”是什么?

通常情况下,调用一个方法结束后会返回一个结果,是一一对应的,现在,我们来思考如下场景:

有一个嵌入到app中显示文档下载列表的网页。要求点击网页中相应文件对应的下载按钮后,开始下载文件,并在该文件显示项的底部显示下载进度。

思考:我们将文件下载的功能在natvie端实现,当点击网页上的某项时,我们通过js调用native的下载方法,native在下载的过程中,不断的向js返回进度, 然后js更新网页上的进度条,等到下载任务结束时,才算本次调用结束。而这种调用的特征就是js的一次调用,对应native的“多次返回”,考虑到native很多耗时任务都可能会多次返回(比如返回进度),DSBridge 2.0对“多次返回”进行了支持,使用DSBridge 就可以非常方便的应对这种case了了。

示例

我们来模拟一个调用计时器的功能:

Native:提供一个倒计时的API, 命名为callProgress, 它的功能是起动一个计时器,倒计时10秒,每过一秒向js输出剩余的时间。

JS: 调用native提供的倒计时API,将剩余时间(秒)更新到网页。

我们看看点击后的效果:

倒计时

Web端:

<div class="btn" onclick="callProgress()">多次回调 <span id='progress'></span></div>

 function callProgress(){
      //调用Native提供的callProgress
       dsBridge.call("callProgress", function (value) {
             //显示剩余的时间
             document.getElementById("progress").innerText=value
      })
 }复制代码

Natvie端:

Android

@JavascriptInterface
public void callProgress(JSONObject jsonObject, final CompletionHandler handler) throws JSONException {

        new CountDownTimer(11000, 1000) {
            int i=10;
            @Override
            public void onTick(long millisUntilFinished) {
               // 返回剩余的时间,会多次调用
                handler.setProgressData((i--)+"");
            }
            @Override
            public void onFinish() {
                //结束调用
                handler.complete("");
            }
        }.start();
 }复制代码

注:setProgressData可以多次调用,每调用一次,js端就会收到一次数据。complete调用之后则代表本次调用结束,handler将失效,调用complete之后将不能再调用setProgressData。

IOS

//下面代码中value、handler为全局变量

- ( void )callProgress:(NSDictionary *) args :(void (^)(NSString * _Nullable result,BOOL complete))completionHandler
{
    value=10;
    //保存handler
    hanlder=completionHandler;
    //起动计时器
    timer =  [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(onTimer:) userInfo:nil repeats:YES];
}

-(void)onTimer:t{
    if(value!=-1){
        //返回剩余的时间,可多次调用
        hanlder([NSString stringWithFormat:@"%d",value--],NO);
    }else{
       //结束调用
        hanlder(@"",YES);
        [timer invalidate];
    }
}
...复制代码

注:
handler(NSString * _Nullable result,BOOL complete)

result: 返回给js的数据。

complete:表示调用是否结束;complete为YES, 调用之后则代表本次调用结束,handler将失效。

完整的示例请参考DSBridge自带的demo:

DSBridge-IOS:github.com/wendux/DSBr…

DSBridge-Android:github.com/wendux/DSBr…

最后

如果你喜欢DSBridge , 欢迎star!

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值