2015-07-29 1 views
0

У меня есть нить и Runnable. Внутри пробега я вызываю функцию. Будет ли эта функция выполняться в новом потоке? или он будет выполнен на главной теме? , а otherFunction() также будет в той же теме?Новая функция вызова темы, будет выполнена на главной теме или нет?

Есть ли способ отлаживать сценарии, подобные этому?

public void startUpload(final Bitmap bitmap){ 

     Thread t = null; 
     t = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       reduceImg(bitmap, 100); 
      } 
     }); 
     t.start(); 
} 

private void reduceImg(Bitmap bitmap, int compressLevel){ 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     String image_str="" ; 
     byte [] byte_arr; 
     try { 
      bitmap.compress(Bitmap.CompressFormat.JPEG, compressLevel, stream); 
      byte_arr = stream.toByteArray(); 
      image_str = Base64.encodeToString(byte_arr, Base64.DEFAULT); 
      Log.e("UploadImg", "OK.. immagine compressa e convertita in stringa"); 
     }catch(Exception e){ 
    }finally{ 
    otherFunction() 
    } 
} 
+0

, вызывая метод 'start()' для объекта Thread, ставит 'run()' своего объекта Runnable в новый поток, который будет выполняться параллельно с 'main'. otherFunction будет в той же (новой) теме – mangusta

ответ

0

t.start() порождает новую тему. Выполняемый выполняется из порожденной нити. И наоборот, если вы вызвали t.run();, runnable был бы выполнен в контексте основного потока.

Использование отладчика или просто журнал, могу ли я понять, какой поток выполняет часть кода?

Вы можете напечатать имя текущего потока с Thread.currentThread().getName(), и вы можете присвоить имя нити вызывающего t.setName("name");. Это поможет вам в случае, если вы решите использовать функцию Logcat для отладки

+0

Спасибо. Извините, но у меня недостаточно репутации, чтобы проголосовать за вас :) –

+0

есть причина, если во время image_str = Base64.encodeToString (byte_arr, Base64.DEFAULT); он блокирует мой интерфейс? если это новый поток, он будет исполняться на backgrond ?! –

+0

не следует. Проблема в другом месте – Blackbelt

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