h5游戏 加载webview 偶尔加载不出来

本来正常好好的,加载一条游戏url 没有问题!有个弊端 手机息屏后 游戏内的声音还存在。看了网上主流的解决方法:
在webview寄存的activity下的生命周期方法下添加如下代码即可:

@Override
    protected void onResume() {
        mWebView.onResume();
        mWebView.resumeTimers();
        super.onResume();


    }

    @Override
    protected void onPause() {
        mWebView.onPause();
        mWebView.pauseTimers();
        super.onPause();
    }

这个锁屏声音的解决了 发现了有个更大的问题出现了,加载游戏链接的url有时候 就加载不出来,这个就奇怪了!一度怀疑是游戏链接的问题。

直到看到api的说明:

Does a best-effort attempt to pause any processing that can be paused safely, such as animations and geolocation. Note that this call does not pause JavaScript. To pause JavaScript globally, use  pauseTimers(). To resume WebView, call onResume().

百度翻译如下:
是否尽最大努力暂停可以安全暂停的任何处理,如动画和地理位置。请注意,此调用不会暂停JavaScript。要在全球范围内暂停JavaScript,请使用“PaulTimeServer())。要恢复WebView,请调用OnReSuMe()。 

webView.onPause ():只是暂停一些安全方面的处理
webView.pauseTimes():暂停所有的js活动

这就明白了 在页面失去焦点的时候 就停止了加载游戏链接的url,所以改动如下:

	@Override
    protected void onResume() {
        mWebView.onResume();
        mWebView.resumeTimers();
        super.onResume();


    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mWebView.onPause();
        mWebView.pauseTimers();
    }

这样即解决了 锁屏声音的问题 又解决了游戏链接有时候加载不出来的问题。

同时记录一下:js 通过handle协议和android前端交互
首先得支持js
webview.getting.setJavaScriptEnabled(true);

并设置js接口 与前端定义一致
js调java:调用webView.addJavascriptInterface(somePOJO, “varName”);
让一个java对象成为webview里面网页的window对象的varName属性,就好像执行了window.varName = somePOJO一样,因为window是全局上下文,js即可以用访问全局变量的方式访问这个java对象了,然后调用这个对象的函数即可,如果somePOJO这个对象有个public void doIt()方法,则可以这样调用它:someButton.οnclick=function(){varName.doIt();}

事例如下:

mWebView.addJavascriptInterface(new RedJavascriptInterface(mWebView, payResultHandler), "control");

 Handler handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                String str = msg.getData().getString("data");
                
            }
        };


private class RedJavascriptInterface {
        WebView webView;
        Handler payResultHandler;

        public RedJavascriptInterface(WebView webView, Handler payResultHandler) {
            this.webView = webView;
            this.payResultHandler = payResultHandler;
        }

        @JavascriptInterface
        public void postMessage(final String json) {
            Message msg = new Message();
			Bundle bundle = new Bundle();
			bundle.putString("data", data);
			msg.setData(bundle);
			handler.sendMessage(msg);
            
        }
    }

即js 那边调用为window.control.postMessage(“jsonData”)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值