我正在开发一个Android应用程序,我想检查是否有互联网连接,如果不是这种情况显示警告信息,并且当有互联网连接时再次加载某个网址。
可以说显示消息并检查互联网连接是否正常工作......但没有单独进行。
我的意思是我有以下代码:
if (!checkConnectivity())
{
browser.stopLoading();
LayoutInflater layoutinflater = LayoutInflater.from(app);
final View textEntryView;
textEntryView = layoutinflater.inflate(R.layout.exitdialog, null);
new AlertDialog.Builder(app)
.setView(textEntryView)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Exit")
.setNegativeButton("CANCEL", null)
.show();
while (!checkConnectivity())
{
}
browser.loadUrl(url);
}
如果我不使用while(!checkConnectivity())到browser.loadUrl(url);然后AlertDialog正确显示。
如果我不使用LayoutInflater layoutinflater = LayoutInflater.from(app);显示();然后应用程序在浏览器上正确加载网页。
但是,如果我使用整个代码,它看起来像是在进入show(!checkConnectivity())循环之前进行显示,因为当重新连接互联网连接时发生的情况是简要显示警告对话框和网页装了。
我觉得这很奇怪,因为据我所知,我没有使用的线程可能导致一个线程可以在其他线程之前被执行,而事实并非如此,这个事情不能满足其中一个编程中最基本的东西,我的意思是如果一条指令在另一条指令之前,那么之前的指令应该是逻辑上执行的(线程除外)。
希望有人对此有所了解并能帮助我。
答案 0 :(得分:1)
您的while
循环阻止了UI线程,对话框无法显示。
繁忙循环以轮询某个条件也是一个大红旗。
考虑等待connectivity event,并使用可取消的progress dialog代替警报对话框,以便在收到事件之前禁用其他用户界面。