2017-02-09 41 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等)。

最簡單的方法是通過事件總線將更改傳達給活動。

相關問題