【发布时间】:2021-07-10 17:30:43
【问题描述】:
我正在尝试在打开我的应用程序时连接到线程中的 TCP/IP 套接字,并希望在连接时显示一个进度对话框。问题是线程总是在显示进度对话框之前执行,这意味着它仅在套接字连接实际发生(或失败)后才显示。
public static boolean startConnection (Context c) {
boolean[] ret = new boolean[1];
ProgressDialog progressDialog = new ProgressDialog(c);
progressDialog.setMessage("Connecting...");
progressDialog.show();
Thread t = new Thread() {
@Override
public void run() {
try {
clientSocket = new Socket();
clientSocket.connect(new InetSocketAddress(SERVER_IP, SERVER_PORT), 5000);
ret[0] = true;
}
catch (IOException e) {
e.printStackTrace();
ret[0] = false;
}
((Activity)c).runOnUiThread(progressDialog::dismiss);
}
};
t.start();
try {
t.join();
}
catch (InterruptedException e) {
e.printStackTrace();
}
return ret[0];
}
我正在onStart() 方法中调用startConnection:
protected void onStart() {
super.onStart();
if (ConnectionHandler.startConnection(this)) {
goToMainActivity();
}
else {
Toast.makeText(this, "Connection error.", Toast.LENGTH_LONG).show();
}
}
我怎样才能使进度对话框在线程实际启动之前显示?
【问题讨论】:
标签: java android multithreading progressdialog ui-thread