在我的应用程序中,我创建了一个自定义对话框,它在 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) {
}
}
};
当您输入synchronized
阻止mydialog()
你获得this
的锁。里面这个synchronized
阻止,你跑ShowDialog()
在 UI 线程上,并尝试获取this
当您进入时再次锁定synchronized
阻止ShowDialog
.
由于锁已经被获取,所以会等待直到锁被释放mydialog()
,这永远不会发生,因为ShowDialog
从不执行过去synchronized(this)
。你所遇到的是僵局。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)