2017-02-09 23 views
1

У меня есть поток, который сделает некоторую обработку, а затем выполнимый код, который отобразит результаты на экране. Проблема в том, что если пользователь нажимает на стрелку назад, а runnable находится между двумя строками кода отображения, следующая строка будет сбой, поскольку действие больше не будет выполняться.Что такое «хороший» способ остановить (линейный) запуск в случае переключения активности?

Приведенный ниже код достигает цели, но я ненавижу, что перед каждой строкой вызывается 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 и т. Д.).

Самый простой способ сделать это - передать изменения в Activity через шину событий.

 Смежные вопросы

  • Нет связанных вопросов^_^