2017-02-09 15 views
1

私はいくつかの処理を行うスレッドを持っていて、その結果を画面に表示する実行可能なコードを持っています。問題は、ランナブルが2行の表示コードの間にある間にユーザーが戻る矢印を押すと、アクティビティがなくなると次の行がクラッシュすることです。アクティビティスイッチの場合に、(リニア)実行可能ファイルを停止する「良い」方法は何ですか?

以下のコードは目標を達成していますが、各行の前に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

本当に安全な方法は、Androidコンテキスト(アクティビティなど)を決して参照しないようにRunnableを変更することです。

これを行う最も簡単な方法は、イベントバスを介して変更をアクティビティに通知することです。

関連する問題