2016-11-08 96 views
-6

我想知道如何知道线程何时完成。知道线程何时完成

public void movetoKnox(View view) throws Exception 
    { 
     countp = 0; 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 

       count = movefileList.size();//4 
       count2 = multiFile.size();//2 
       for (int i =0; i<count; i++) 
       { 
        for(int j=0; j<count2;j++) 
        { 
         if(movefileList.get(i).equals(multiFile.get(j))) 
         { 

          File temp = new File(multiFile.get(j)); 
          try{ 
           //copyFile(temp,chamberLocation); 
           copyFileOrDirectory(multiFile.get(j),chamberLocations); 

          }catch (Exception e) 
          { 
           Log.e(TAG,"Exception Alex: "+e); 
           // Toast.makeText(moveKnox.this, "Exception: "+e,Toast.LENGTH_SHORT).show(); 
          } 

         } 
        } 

       } 



      } 

     }; 

Thread t = new Thread(r); 
     t.start(); 

当前此线程批量传输数据。它可以从几MB到GB。我希望能够知道数据传输何时完成,并且只需在后台显示敬酒。

我认为创建一个新的线程,并调用它内部的t.join()将工作,但它只是崩溃,我应该如何处理它。

+2

lmao that capslocking on point,但我有点失望,你没有在你的代码中遵循套件。 –

+1

请不要用大写字母锁定问题。这使它很难阅读。 – Lexi

+0

这甚至不是很难阅读,它给出了OP是有需要的概念。我也是在8岁的时候使用了大写锁定,我也希望每个人都能为我解决问题,而不是自己付出努力。 SOF不是你想要“想要”的地方,它是讨论你正在做的工作的地方。 – Jacksonkr

回答

0

你需要的可能是这样的简单:

final MyClass self = this; 

Runnable r = new Runnable() { 
    @Override 
    public void run() { 
     // ** some code that takes forever ** 
     self.doADance(); // this is your toast animation or whatever you want 
    } 
}; 

关键的事情发生在这里:

  • Runnable
  • 控股通过 final当前对象的参考,所以我们可以使用它以后
  • 在我们的异步“函数”(一个新线程)内同步。这意味着我们的doADance将不会被调用,直到我们耗时的功能完成。
1

进口

import android.os.Handler 

在我加入主线程。

Handler handler = new Handler() 
{ 
    @override 
    public void handleMessage(Message msg) 
    { 
     Toast.makeText(getContext,"TRANSFER COMPLETE",TOAST.LENGTH_SHORT).show(); 
    } 

}; 




public void movetoKnox(View view) throws Exception 
     { 
      countp = 0; 
      Runnable r = new Runnable() { 
       @Override 
       public void run() { 

        count = movefileList.size();//4 
        count2 = multiFile.size();//2 
        for (int i =0; i<count; i++) 
        { 
         for(int j=0; j<count2;j++) 
         { 
          if(movefileList.get(i).equals(multiFile.get(j))) 
          { 

           File temp = new File(multiFile.get(j)); 
           try{ 
            //copyFile(temp,chamberLocation); 
            copyFileOrDirectory(multiFile.get(j),chamberLocations); 

           }catch (Exception e) 
           { 
            Log.e(TAG,"Exception Alex: "+e); 
            // Toast.makeText(moveKnox.this, "Exception: "+e,Toast.LENGTH_SHORT).show(); 
           } 

          } 
         } 

        } 

    **handler.sendEmptyMessage(0);** 

       } 

      }; 

    Thread t = new Thread(r); 
      t.start();