第一次在這裏發佈一個問題。剛開始編寫和編寫我的第一個應用程序。同步方法是否在UI線程(Android)的不同線程上運行?
我有了該方法fetchUpdates()的應用程序的類文件:
public synchronized void fetchUpdates() {
String[] mURLs = getURLs();
new DownloadJSONData().execute(mURLs[0], mURLs[1]);
}
DownloadJSONData是asyncTask
從服務器獲取更新和onPostExecute
方法使用JSON數組從服務器更新SQLite數據庫。
應用程序的不同組件(小部件和活動)調用此方法以從服務器獲取更新以更新數據庫。
問題:synchronized方法是否在UI線程的單獨線程上運行?如果是這樣,將DownloadJSONData
中的代碼移動到同步的fetchUpdates()
方法中應該沒有問題吧?如果在連接服務器或從服務器下載數據時有阻礙,它不應該阻止UI線程正確嗎?
動機:我試圖改變fetchUpdates()
方法返回一個指示數據庫是否更新的布爾值。然而,因爲它現在(我認爲)fetchUpdates()
方法在asyncTask
的onPostExecute
方法之前完成,因此,fetchUpdates()
方法不能指示是否更新數據庫的DownloadJSONData()
的調用。如果數據庫在調用後更新,我需要調用fetchUpdates()
方法的應用程序組件的行爲不同。
P.S.由於我是編程新手,簡單而詳細的解釋將非常有用。
謝謝!
我有一個問題給你。你爲什麼不在'AsyncTask'的'doInBackground()'方法中更新數據庫?因爲'onPostExecute()'在UI線程上運行,並且可能會導致Hickup。 – tolgap 2013-03-19 09:46:51
這是一個很好的觀點。我會帶來改變。當我編寫代碼時沒有考慮到這一點。感謝您指出了這一點! – fahmy 2013-03-19 09:50:09