2012-06-25 38 views
0

我有一個Android應用程序,它使用RPC機制來設置/從服務器獲取信息。我從主線程(阻塞)調用RPC,並且我希望它們被阻塞。但是,有時一個調用可能持續幾秒鐘,我想在指定的時間(例如1秒)後顯示一個不確定的進度對話框。Android:阻止RPC進度對話框

我試圖產生一個新的線程,使呼叫和主線程在一個循環(睡眠)等待,直到調用完成。在這個圈子裏面,我顯示進度對話框,但這不起作用。

是否有可能顯示和更新另一個線程內的進度對話框還是有人知道一個更好的解決方案,允許我使用阻塞調用?

回答

0

嘗試使用AsyncTask。這是一種用於進行此類網絡調用的Android機制。獲取詳細短暫的AsyncTask這裏:

Using AsynTask to show progress bar while attempting to SSH to Server

使用AsyncTask可以阻止來自前方前進的用戶。您必須在AsyncTaskonPreExecute()方法中顯示progress dialog。所有與網絡有關的活動都將在doInBackground()中進行。後臺操作完成後,將會有一個電話onPostExecute()progress dialog將被解僱。

AsyncTask是一個異步調用,因爲您有兩個線程同時工作,一個是您在其上顯示進度對話框的UI線程,另一個是從服務器獲取數據的非ui後臺線程。

希望這個解釋有幫助。

0

你不能同時做兩個事情,讓主線程在循環中等待並顯示一個進度對話框。主線程等待或顯示對話框。

爲什麼要阻止主線程?通過互聯網進行通信應該始終在後臺線程中完成,因爲你永遠不知道需要多長時間才能完成。在AsyncTask中執行該操作,並顯示主進度對話框。

+0

我想阻止主線程,因爲我有我的應用程序沒有任何好處,如果調用完成異步(用戶必須等待,反正:

要一個新的線程中更新UI繼續),異步方法使程序邏輯複雜得多。 – osiris81

+0

它並不那麼複雜。它是現今幾乎所有應用程序的一部分,因爲大多數應用程序都使用網絡。讓用戶在後臺獲取AsyncTask中的數據時等待進度對話框。 – Ronnie

0

我發現了一個似乎可行的解決方案(至少我還沒有注意到任何問題)。我知道正確的方法是使用AsyncTask之類的東西,但在我的情況下,我沒有從中受益,並且使程序邏輯複雜化。之前,他可以

new Thread() 
    { 
     public void run() 
     { 
      Looper.prepare(); 
      ... do UI stuff here 
      Looper.loop(); 
     } 
    }.start();