JS关闭Android的Activity异常记录及解决

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haoyuegongzi/article/details/80419865

吐槽一下,现在的产品需求是越来越奇葩,越来越没有规则,越来越反人类的了。

今天产品那边说,需要在我们的app内嵌入一个广告的的H5,我们这边负责网页的加载就可以了,其他的诸如界面操作有他们自己实现,界面关闭由我们提供一个本地的方法供后台调用。

刚开始一想,嗯,这需求简单嘛,获取url,加载进去就ok,然后通过注解机制注入JavascriptInterface,并提供一个方法就可以了具体实现如下:

注解JavascriptInterface部分如下:

public final class Javascript {
    public Javascript() {
    }

    @JavascriptInterface
    public void closeCurrentActivity(){
        DailyPaperActivity.this.onBackPressed();
        DailyPaperActivity.this.finish();
    }
}

原以为这样ok了,但在调用的时候却发现,上述方法不管用,并且还抛了异常:

[INFO:CONSOLE(63)] "Error: Java exception was raised during method invocation", source: http://xxx.xx.xx.xx:xxxx/app/view/topic-demo/topc-demo.html?token=xxxxxxxxxxxxxxxx&diviceId=xxxxxxxxxxxxxxx&appType=Android (63)

异常的大体意思是说,加载那个url的界面的Java代码执行出现异常,异常发生在js代码的第63行,而JS代码第63行对应的Java代码则是:

DailyPaperActivity.this.onBackPressed();

一下子懵逼了,这个方法还异常了?但也没说具体是什么异常,不知道解决方案,好吧,有事找度娘,百度一下一大堆,包括stackoverflow,无一例外的都是提到更新UI的时候要报这个错,都有没有提到关闭Activity的情景。后来一同行做过这种需求,喊我尝试下注销掉onBackPressed方法这行,直接finish。嗯,算是一个思路,尝试下。

一注消,确实。能够顺利的关闭Activity,也没用异常或者warn信息出现。问题就这么完美的解决了。

public final class Javascript {
    public Javascript() {
    }
    @JavascriptInterface
    public void closeCurrentActivity(){
        DailyPaperActivity.this.finish();
    }
}

仔细一想。这算个什么事儿呢,什么原因引发了这个问题?

留下此问,继续思考。

猜你喜欢

转载自blog.csdn.net/haoyuegongzi/article/details/80419865