我有两个名为Client1.java和Client2.java的活动。
Client1与远程主机创建tcp / ip连接以运行命令。然后服务器将输出发送回Client1.Interct将显示在Client2 Activity中。由于需要一些时间将输出从远程服务器发送回Client1活动,因此我使用了progreesDialog来显示一些进度,直到输出完全从服务器发送回Client1活动。
我需要一些同步,即每当输出完全发送回Client1活动进度时,对话将完成,Client2将开始显示从远程服务器收到的输出。
答案 0 :(得分:0)
AsyncTask是实现异步线程的概念,在Android中被称为Painless threading,因为如果你实现了这个,那么你就不用担心线程管理。
现在,您只需要在特定方法中编写逻辑。
例如:
onPreExecute() - 显示“进度”对话框的位置。
doInBackground() - 你需要编写长时间运行的任务,远程调用逻辑就在这里。
onPostExecute() - 您需要编写用于启动Client2活动的编码并解除对话框。
答案 1 :(得分:0)
Paresh是对的!看一个例子......
private class SessionTask extends AsyncTask<String, Integer, Integer> {
ProgressDialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = new ProgressDialog(TestUI.this);
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
dialog.setTitle("UploadFile");
dialog.setMessage("Uploading file...");
dialog.setCancelable(false);
dialog.setProgress(0);
dialog.show();
}
@Override
protected Integer doInBackground(String... params) {
.........
} catch(MalformedURLException e) {
Log.e(TestUI.TAG, "E: Malformed URL! " + e.getLocalizedMessage());
return 1;
} catch(IOException e) {
Log.e(TestUI.TAG, "E: I/O error! " + e.getLocalizedMessage());
return 2;
}
return 0;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
dialog.setMax(values[1]);
dialog.setProgress(values[0]);
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
dialog.dismiss();
switch (result) {
case 0:
Toast.makeText(TestUI.this, "Uploading finished", Toast.LENGTH_LONG).show();
new DownloadTask().execute(new String[] {TestUI.LINK_DOWN, TestUI.FILE_DOWN});
break;
case 1:
Toast.makeText(TestUI.this, "E: Malformed URL!", Toast.LENGTH_LONG).show();
break;
case 2:
Toast.makeText(TestUI.this, "E: I/O error! Connection was dismissed!!!", Toast.LENGTH_LONG).show();
break;
}
}
}