2017-12-02 173 views
0

我從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() 

回答

0

問題是android啓動線程默認一個一個執行線程。用途:

ExecutorService executor = Executors.newCachedThreadPool(); 

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

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