2

在我的应用程序中,我创建了一个自定义对话框,它同时显示在 webview 和普通 android 应用程序中,并且在显示对话框时我做了一些后台操作,当我调用 mydialog 函数时,它会显示我的自定义对话框和它还返回一些值,当我使用 webview+javainterface 时它可以正常工作,但它不适用于普通应用程序,流程是

首先我会得到我的对话框,在我做了一些处理之后(这里主线程将等待,对话框需要显示,)然后我将返回字符串,问题是当我调用这个函数而不是那个时对话框不显示我的后台进程完成后将显示对话框。

我称之为我的对话框,如:

String sample=mydialog();

public String mydialog() {

            String mystring = null;




                try {
                    myactivity.this.runOnUiThread(ShowDialog);


                    while (customizeddialog.Getvalue() == null) {

                    }

                    mystring = customizeddialog.Getvalue();
                    customizeddialog.Setvalue(null);
                } catch (Exception e) {



            return mystring;

        }

        private Runnable ShowDialog = new Runnable() {

            public void run() {


                    try {
                        customizeddialog m_dialog = new customizeddialog(myactivity.this);
                        m_dialog.setCancelable(false);
                        m_dialog.show();

                    } catch (Exception e) {

                    }



            }
        };
4

1 回答 1

1

当您进入synchronized块中时,mydialog()您将获得this的锁。在这个synchronized块中,你在 UI 线程上运行,ShowDialog()this你进入.synchronizedShowDialog

由于锁已经被获取,它会一直等待直到它被释放mydialog(),这永远不会发生,因为ShowDialog从不执行过去synchronized(this)。你所拥有的是僵局。

于 2013-03-06T13:37:48.193 回答