android中进度同步对话框

时间:2012-03-01 12:58:15

标签: android progressdialog

我有两个名为Client1.java和Client2.java的活动。

Client1与远程主机创建tcp / ip连接以运行命令。然后服务器将输出发送回Client1.Interct将显示在Client2 Activity中。由于需要一些时间将输出从远程服务器发送回Client1活动,因此我使用了progreesDialog来显示一些进度,直到输出完全从服务器发送回Client1活动。

我需要一些同步,即每当输出完全发送回Client1活动进度时,对话将完成,Client2将开始显示从远程服务器收到的输出。

2 个答案:

答案 0 :(得分:0)

AsyncTask是实现异步线程的概念,在Android中被称为Painless threading,因为如果你实现了这个,那么你就不用担心线程管理。

现在,您只需要在特定方法中编写逻辑。

例如:

  1. onPreExecute() - 显示“进度”对话框的位置。

  2. doInBackground() - 你需要编写长时间运行的任务,远程调用逻辑就在这里。

  3. 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;
        }
    }
}