Синхронизация Прогресс Диалог в Android - PullRequest
0 голосов
/ 01 марта 2012

У меня есть два вида деятельности: Client1.java и Client2.java.

Client1 создает tcp / ip-соединение с удаленным хостом для запуска команды. Затем сервер отправит выходные данные обратно на Client1.Выходные данные будут отображены в Client2 Activity. Поскольку требуется некоторое время для отправки вывода обратно на активность Client1 с удаленного сервера, я использовал progreesDialog, чтобы показать некоторый прогресс, пока вывод полностью не будет отправлен обратно на активность Client1 с сервера.

Мне нужна некоторая синхронизация, когда всякий раз, когда выходные данные будут полностью отправлены обратно клиенту1, активность progressDialog будет завершена, и клиент2 начнет показывать выходные данные, полученные с удаленного сервера.

Ответы [ 2 ]

0 голосов
/ 01 марта 2012

Пареш прав !!!Посмотри пример ...

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;
        }
    }
}
0 голосов
/ 01 марта 2012

AsyncTask - это концепция для реализации асинхронной многопоточности, которая известна как безболезненная многопоточность в Android, потому что при ее реализации не нужно беспокоиться об управлении потоками.

Теперь вам просто нужно написать логику внутри определенного метода.

например:

  1. onPreExecute () - там, где отображается диалоговое окно хода выполнения.

  2. doInBackground () - Там, где вам нужно написать долгосрочное задание, здесь используется логика удаленного вызова.

  3. onPostExecute () - Где вам нужно написать код для запуска действия Client2, а также закрыть диалоговое окно.

...