显示延迟的进度对话框
Progress Dialog showing delay
我从之前由 Thread.run() 打开的某个线程打开 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()
问题是 android 启动线程默认一个接一个地执行。使用:
ExecutorService executor = Executors.newCachedThreadPool();
Future<?> future_progress1 = executor.submit(tast1);
Future<?> future_progress2 = executor.submit(tast2);
我从之前由 Thread.run() 打开的某个线程打开 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()
问题是 android 启动线程默认一个接一个地执行。使用:
ExecutorService executor = Executors.newCachedThreadPool();
Future<?> future_progress1 = executor.submit(tast1);
Future<?> future_progress2 = executor.submit(tast2);