AndroidProject icon indicating copy to clipboard operation
AndroidProject copied to clipboard

MessageDialog在@JavascriptInterface标记的方法中不显示

Open shimingyue1994 opened this issue 2 years ago • 3 comments

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

MessageDialog在@JavascriptInterface标记的方法中不显示

  • 框架版本【必填】:java -13.1

  • 问题描述【必填】:继承自BaseDialog的MessageDialog在@JavascriptInterface标记的方法中不显示

  • 复现步骤【必填】:webview中嵌套了一个网页,网页按钮点击时调用@JavascriptInterface标记的本地方法后,在方法里写的dialog.show后不显示弹窗,但postDelayed延迟后可正常显示,代码如下

 @JavascriptInterface
        public void evokeAddress(String args) {
            /*直接调用不显示弹窗*/
            new MessageDialog.Builder(WholesaleWaresDescActivity.this)
                    .setTitle("哈哈哈")
                    .setMessage("哈哈哈哈哈哈")
                    .show();
            /*dialog延迟后正常显示*/
            postDelayed(new Runnable() {
                @Override
                public void run() {
                    new MessageDialog.Builder(WholesaleWaresDescActivity.this)
                            .setTitle("哈哈哈")
                            .setMessage("哈哈哈哈哈哈")
                            .show();
                }
            },10);

        }
    }
  • 是否必现【必填】:是

  • 出现问题的手机信息【必填】:Vivo 华为p30

  • 出现问题的安卓版本【必填】:Android 10 鸿蒙2.0

请回答

  • 是部分机型还是所有机型都会出现【必答】:Vivo 华为p30

  • AndroidProject 最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:是

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 AndroidProject 工程来复现该问题【必答】:否

  • 使用原生的权限 API 是否会出现该问题【必答】:否 原生AlertDialog可正常弹出

其他

  • 提供报错堆栈(如果有报错的话必填,注意不要拿被混淆过的代码堆栈上来)

  • 提供截图或视频(根据需要提供,此项不强制)

  • 提供解决方案,在postDelayed延迟后正常显示,代码如下

  @JavascriptInterface
        public void evokeAddress(String args) {

            /*dialog延迟后正常显示*/
            postDelayed(new Runnable() {
                @Override
                public void run() {
                    new MessageDialog.Builder(WholesaleWaresDescActivity.this)
                            .setTitle("哈哈哈")
                            .setMessage("哈哈哈哈哈哈")
                            .show();
                }
            },10);
        }
    }

shimingyue1994 avatar Aug 05 '22 09:08 shimingyue1994

@shimingyue1994 小伙子,那你有没有研究过 MessageDialog 为什么在其他地方可以显示?但是偏偏在 Js 方法里面不行?

getActivity avatar Aug 06 '22 08:08 getActivity

@shimingyue1994 小伙子,那你有没有研究过 MessageDialog 为什么在其他地方可以显示?但是偏偏在 Js 方法里面不行?

研究了 ,但没研究出来;不过这个问题也不影响我i使用,我延迟10ms后就可以显示了,这个issues可以关掉了;写这个issues主要是看别人有没有遇到过这个问题,遇到了可以参考这个解决

shimingyue1994 avatar Aug 09 '22 01:08 shimingyue1994

@shimingyue1994 小伙子,你打印一下 Js 方法是在哪个线程中回调就明白了。

getActivity avatar Aug 09 '22 13:08 getActivity

啊 原来时没在主线程中 我runOnUiThread切到主线程中就显示了,谢谢轮子哥

shimingyue1994 avatar Aug 22 '22 08:08 shimingyue1994