2017-02-09 44 views
1

我有一个线程将做一些处理,然后有可运行的代码,它将在屏幕上显示结果。问题是,如果用户在可运行列表介于两行显示代码之间时按下后退箭头,则当该活动不再存在时,下一行将崩溃。在活动切换的情况下停止(线性)可运行的“好”方式是什么?

下面的代码实现了目标,但我讨厌在每行之前有if语句。有没有更好的办法?

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    imgThread.interrupt(); 
} 

private void processImage(){ 
     final Handler mHandler = new Handler(Looper.getMainLooper()); 

     progress = new ProgressDialog(this); 
     progress.setMessage("TEXT"); 
     progress.setIndeterminate(true); 
     progress.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     progress.show(); 

     imgThread = new Thread(){ 
      @Override 
      public void run() { 

       //Process the image a bit 

       mHandler.post(new Runnable() { 
        @Override 
        public void run() { 
         if(!imgThread.isInterrupted()) 
         imageView.setImageBitmap(mDisplayBitmap); 
         if(!imgThread.isInterrupted()) 
         progress.setMessage("TEXT TEXT"); 
         if(!imgThread.isInterrupted()) 
         progress.show(); 
        } 
       }); 

       //More processing 

       mHandler.post(new Runnable() { 
        @Override 
        public void run() { 
         if(!imgThread.isInterrupted()) 
         addScreenListener(); 
         if(!imgThread.isInterrupted()) 
         determineHelpToast("TEXT TEXT TEXT", Toast.LENGTH_LONG); 
         if(!imgThread.isInterrupted()) 
         progress.dismiss(); 
        } 
       }); 

      } 
     }; imgThread.start(); 
    } 

回答

1

真正安全的方法是修改您的Runnable,以便它永远不会引用Android Context(Activity等)。

最简单的方法是通过事件总线将更改传达给活动。

相关问题