2012-11-30 475 views
0

我有一個問題處理android中的線程,在我的類中我必須創建一個線程,創建一些線程後,線程完成我會得到一些價值,在這裏我想等待我的主進程,直到線程完成它的過程,但是,當我把等待(),或在主進程線程通知不顯示在我的應用程序的UI在Android中線程等待

這是示例代碼

protected void onCreate(Bundle savedInstanceState) { 

     downloadThread = new MyThread(this); 
      downloadThread.start(); 

      synchronized(this){ 
       try { 
        this.wait(); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 

String test=Recognition.gettemp(); 
    public class MyThread extends Thread { 
     private Recognition recognition; 

     public MyThread(Recognition recognition) { 
      this.recognition = recognition; 
      // TODO Auto-generated constructor stub 
     } 

     @Override 
     public void run() { 
    synchronized(this) 

      {     

         handler.post(new MyRunnable()); 

       } 

       notifyAll(); 
      } 
     } 
    } 
    static public class MyRunnable implements Runnable { 
     public void run() { 
       settemp(template); 
      } 

     } 
    } 

    public static String gettemp() { 
     return template; 
    } 
    public static void settemp(String template) { 
     Recognition.template = template; 
    } 

} 

在這裏,我也不會用AsynTask因爲我有一些其他問題是我選擇線程的原因即使現在的問題是線程等待做任何給這個建議

回答

0

使用下面的邏輯: -

new Thread(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     //do the code here such as sending request to server 
     runOnUiThread(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       //do here the code which interact with UI 
      } 
     }); 
    } 
}).start(); 
0

如果您凍結主UI線程,您會發生什麼?

您應該使用ASyncTask在onPreExecute方法中顯示您的gui,在doInBackground中執行任務,然後在onPostExecute方法中顯示結果。

作爲一個優點,您還可以使用onProgressUpdate更新進度。

0

這不是一個解決方案,只是一個建議,你應該如何構建你的活動/應用程序。

您不應該通過調用wait()來阻止主線程的不良用戶體驗,也不建議。它也會出現Android Not Responding(ANR)彈出窗口。

你可以讓你從後臺線程更新UI,並讓UI響應。加載您的用戶界面的靜態部分在onCreate(),然後啓動後臺線程以延遲加載組件的其餘部分。