Растровые операции в фоновом потоке делают пользовательский интерфейс невосприимчивым - PullRequest
0 голосов
/ 12 июня 2018

Я выполняю следующие операции в фоновом потоке:

  1. Сохранение данных байтового изображения локально в формате JPEG.
  2. Выбор изображения в виде растрового изображения.
  3. Запустите алгоритм обнаружения лиц и выберите точки лица
  4. Поместите оверлей в соответствии с этими точками
  5. И, наконец, сохраните этот растровое изображение снова.

Во время выполнения этих операций яЯ показываю индикатор выполнения.Но анимация индикатора выполнения застревает, т.е. она перестает отвечать до тех пор, пока поток не завершит свою работу (обновление: кажется, что ничего во всем пользовательском интерфейсе не работает во время фоновой работы).

Разве это не создает реальных намеренийиспользование фонового потока устарело?

Какой подход я должен использовать для преодоления этой проблемы?

Мой код:

  //Show ProgressBar
  Runnable worker = () -> {

      //My Operations

     runOnUiThread(() -> {

             //Hide ProgressBar

          });
    }

1 Ответ

0 голосов
/ 12 июня 2018

Вы можете использовать асинхронный подход, он будет работать

 private class MyAsyncTask extends AsyncTask<String, Progress, Bitmap> {
 protected void onPreExecute() {
     // Runs on the UI thread before doInBackground

     progressBar.setVisibility(ProgressBar.VISIBLE);
 }

 protected Bitmap doInBackground(String... strings) {
     // Some long-running task like downloading an image.
     // convert your bitmap
     return someBitmap;
 }

 protected void onProgressUpdate(Progress... values) {
  //update progress
 }  

 protected void onPostExecute(Bitmap result) {
     //hide progress bar
 }}
...