2012-04-24 21 views
1

我有幾個方法的主要活動。Android中線程的正確使用是什麼?

  • GetTopics:調用REST API,並返回JSON結果
  • BindTopics:顯示從GetTopics屏幕

有一些其他具有類似功能的結果,但我相信我能適用於所有方法的解決方案。

問題:在單獨的線程中運行它們的正確方法是什麼?他們是否應該在同一個線程中?一旦GetTopics完成,我應該打電話給BindTopics嗎?

無論哪種方式,在異步線程完成之前不會構建UI?如果是這樣,我如何更新UI?

任何幫助表示讚賞。

回答

1

我會使用AsyncTask將其加載到進度對話框中。您將需要聲明處理程序以更新UI線程中的控件。

例如:當我的應用程序必須從FTP服務器下載大量數據

private Handler  handler   = new Handler(); 


final ProgressDialog pd = new ProgressDialog(this); 
pd.setTitle("Getting topics.."); 
pd.setMessage("Please while topics are retrieved"); 
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
pd.setIndeterminate(true); 

new AsyncTask<Void, Void, Void>() { 

    @Override 
    protected Void doInBackground(Void... params) { 

     GetTopics(); 

     return null; 
    } 

    @Override 
    protected void onPreExecute() { 

     pd.show(); 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     BindTopics(); 

     pd.dismiss(); 

     handler.post(new Runnable() { 

      public void run() { 
       // update UI 
       // remove loading view 
       // load details of topics 
      } 
     }); 
     super.onPostExecute(result); 
    } 

}.execute(); 
1

你想創建你的UI(帶有某種加載屏幕的),然後啓動的AsyncTask下載數據並顯示它。

有一個基本的博客文章AsyncTasks這裏:http://android-developers.blogspot.co.uk/2009/05/painless-threading.html

在AsyncTasks doInBackground方法,你能叫GetTopics。然後在onPostExecute方法中,您可以調用BindTopics並顯示數據。在onPostExecute方法中,您可以檢查數據是否正確下載,然後再嘗試顯示它。

+0

這正是我需要的!非常感謝你。 – alockrem 2012-04-24 14:28:38

0

主要用途爲我的線程是。但是,當下載時,我希望用戶仍然可以使用我的應用程序。如果我在主線程中編寫了下載代碼,則用戶無法使用該應用程序,並且所有按鈕都不起作用。線程的主要思想是劃分每個線程的CPU使用時間。

如果您希望多個任務同時執行,您必須使用線程。

相關問題