2016-11-08 158 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();