后台线程中的位图操作使UI无响应

时间:2018-06-12 04:35:56

标签: android performance android-layout android-studio android-progressbar

我正在后台线程中运行以下操作:

  1. 将字节图像数据本地存储为jpeg。
  2. 将该图像作为位图获取。
  3. 运行面部检测算法并获取面部点
  4. 根据这些点放置叠加层
  5. 最后再次保存该位图。
  6. 执行这些操作时,我正在显示进度条。但是进度条动画卡住了,但是在线程完成其工作之前它变得没有响应(更新:当后台工作正在运行时,整个UI中似乎没有任何功能)。

    这是否会使使用后台线程的实际意图过时?

    我应采取什么方法来解决这个问题?

    我的代码是:

      //Show ProgressBar
      Runnable worker = () -> {
    
          //My Operations
    
         runOnUiThread(() -> {
    
                 //Hide ProgressBar
    
              });
        }
    

1 个答案:

答案 0 :(得分:0)

您可以使用异步方法,它可以正常工作

 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
 }}