我有幾個方法的主要活動。Android中線程的正確使用是什麼?
- GetTopics:調用REST API,並返回JSON結果
- BindTopics:顯示從GetTopics屏幕
有一些其他具有類似功能的結果,但我相信我能適用於所有方法的解決方案。
問題:在單獨的線程中運行它們的正確方法是什麼?他們是否應該在同一個線程中?一旦GetTopics完成,我應該打電話給BindTopics嗎?
無論哪種方式,在異步線程完成之前不會構建UI?如果是這樣,我如何更新UI?
任何幫助表示讚賞。
我有幾個方法的主要活動。Android中線程的正確使用是什麼?
有一些其他具有類似功能的結果,但我相信我能適用於所有方法的解決方案。
問題:在單獨的線程中運行它們的正確方法是什麼?他們是否應該在同一個線程中?一旦GetTopics完成,我應該打電話給BindTopics嗎?
無論哪種方式,在異步線程完成之前不會構建UI?如果是這樣,我如何更新UI?
任何幫助表示讚賞。
我會使用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();
回答你所有的問題是AsyncTask
你想創建你的UI(帶有某種加載屏幕的),然後啓動的AsyncTask下載數據並顯示它。
有一個基本的博客文章AsyncTasks這裏:http://android-developers.blogspot.co.uk/2009/05/painless-threading.html
在AsyncTasks doInBackground方法,你能叫GetTopics。然後在onPostExecute方法中,您可以調用BindTopics並顯示數據。在onPostExecute方法中,您可以檢查數據是否正確下載,然後再嘗試顯示它。
主要用途爲我的線程是。但是,當下載時,我希望用戶仍然可以使用我的應用程序。如果我在主線程中編寫了下載代碼,則用戶無法使用該應用程序,並且所有按鈕都不起作用。線程的主要思想是劃分每個線程的CPU使用時間。
如果您希望多個任務同時執行,您必須使用線程。
這正是我需要的!非常感謝你。 – alockrem 2012-04-24 14:28:38