新的线程调用函数,是否会在主线程上执行?

时间:2015-07-29 09:06:28

标签: android multithreading

我有一个线程和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()
   }
}

1 个答案:

答案 0 :(得分:0)

t.start()产生一个新线程。 runnable从生成的线程执行。相反,如果你调用t.run();,则runnable将在主线程的上下文中执行。

  

使用调试器或只是Log,我可以理解哪个线程执行代码的某些部分吗?

您可以使用Thread.currentThread().getName()打印当前线程的名称,并为调用t.setName("name");的线程指定名称。如果您决定使用Logcat进行调试

,这将有助于您