在我的应用程序中,我创建了一个自定义对话框,在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) {
}
}
};
答案 0 :(得分:1)
当您在synchronized
中输入mydialog()
块时,您获得了this
的锁定。在此synchronized
块中,您在UI线程上运行ShowDialog()
,并在this
中输入synchronized
块后再次尝试获取ShowDialog
锁定。
由于已经获得了锁定,因此它将一直等到mydialog()
中的锁定,这将永远不会发生,因为ShowDialog
永远不会执行synchronized(this)
。你所拥有的是僵局。