进度对话框显示延迟

时间:2017-12-02 19:16:45

标签: java android thread-safety progressdialog

我从Thread.run()公开打开的一些Thread中打开ProgressDialog。问题是ProgressDialog仅在select_language_by_user()函数完成它的代码后显示。

看起来我在调用select_language_by_user()之后有一些暂停,在完成后它会立即打开ProgressDialog和新的Activity。

我试过用户runOnUiThread()来启动ProgressDialog,但它没有帮助。 Handler.post()和.postAtFrontOfQueue()以相同的方式工作。

    private void select_language_by_user() throws BhriguException {

    if (logcat == null) {

        String message_no_logcat = ""
                + "Невозможно использовать объект ЛОГИРОВАНИЕ "
                + "в функции select_language_by_user";

        throw new CriticalException(logcat, message_no_logcat);

    }

    boolean isLogging = logcat.isLogging();
    logcat.set_Logging(false);
    logcat.LogD(this, "Запущена функция select_language_by_user");

    try { // Основной код процедуры / функции

        try { // Попытка открыть диалог прогресса

            get_progress().show();

        } catch (BhriguException e) {

            if (logcat != null)

                logcat.LogE(this, "Ошибка создания и отображения диалога прогресса ожидания списка языков" + ": " + EOS + e);

        } // END: Попытка открыть диалог прогресса

        // Формируем интент

        final Intent intent = new Intent(activity_ID3_editor_COMM.this, activity_select_value_from_list.class);

        // Добавляем значения


        intent.putExtra(activity_select_value_from_list.TITLE, getString(R.string.title_select_language)); // Заголовок окна выбора)

        intent.putExtra(activity_select_value_from_list.SHORT_VALUES, logcat.get_available_language_tags());

        ArrayList<Integer> colors = new ArrayList<>();

        final int background_color = activity.getResources().getColor(R.color.bhrigu_light_lightgray);

        for (int i = 0; i < logcat.get_available_language_tags().size(); i++) {

            colors.add(background_color);

        }

        intent.putExtra(activity_select_value_from_list.COLORS, colors);

        intent.putExtra(activity_select_value_from_list.VALUES, logcat.get_available_languages());

        // Запускаем активность

        activity_ID3_editor_COMM.this.startActivityForResult(
                intent,
                IrmaMainActivity.ID_SELECT_LANGUAGE
        );

    } catch (OutOfMemoryError e) { // Нехватка памяти - отправляем наверх

        if (logcat != null) logcat.NoMemoryAlert(e);

        throw new OutOfMemoryError("Нехватка памяти при работе функции запуска окна выбора языка коментария" + ": " + EOS + e);

    } catch (Throwable e) { // Другие ошибки - реагируем

        String message = ""
                + "Ошибка работе функции запуска окна выбора языка коментария"
                + ": " + EOS + e;

        throw new BhriguException(message);

    } finally {

        if (logcat != null) logcat.set_Logging(isLogging);

    } // END: Контроль ошибок

} //END: select_language_by_user()

1 个答案:

答案 0 :(得分:0)

问题是android启动线程默认逐个执行线程。使用:

ExecutorService executor = Executors.newCachedThreadPool();

Future<?> future_progress1 = executor.submit(tast1);

Future<?> future_progress2 = executor.submit(tast2);