我正在創建一個依賴於Internet連接的數據後端的應用程序。這些數據在活動之間很常見。此外,數據將保持刷新,例如通過每兩三分鐘更新一次。因此,我創建了一個數據處理程序類,它應該處理與數據下載,解析等有關的所有事情。有時,它會從Activity接收命令來刷新數據。如何在基礎數據處理程序接收數據時在Activity上觸發UI更新
問題是,如何在數據處理程序中有新數據可用時刷新活動中的UI。如果數據處理程序處於活動狀態,則可以僅發佈UI線程的處理程序來更新它。但是,我不知道如何從這個基礎類中做到這一點。有什麼建議?
下面是三類粗糙代碼:
/**
* The data handler class itself
*/
public class DataHandler {
Object data;
public void getData() {
// starts a thread (HTTP query) to get data
}
private class dataReceived (Object data) {
// receives data
this.data = data;
// TRIGGER updateUI() in MyActivity! HOW?
}
}
/**
* Application class. I'm planning to keep data handler here, and reference it from activities when required.
*/
public class MyApplication extends Application {
private DataHandler dataHandler;
public DataHandler getDataHandler() {
return dataHandler;
}
public void onCreate() {
DataHandler dataHandler = new DataHandler();
}
}
/**
* Activity
*/
public class MyActivity extends Activity {
DataHandler dataHandler;
public void onCreate(Bundle o) {
dataHandler = ((MyApplication) getApplication()).getDataHandler();
}
public void onResume() {
// trigger data refresh (OBS! This could also be by a button press etc.)
dataHandler.getData();
}
public void updateUI() {
// UPDATE UI
// should be called on DataHandler when data is received. HOW?
}
}
請參考以下文章http://stackoverflow.com/questions/6223389/do-some-android-ui-stuff-in-non-ui-thread/6223416#6223416 – ingsaurabh 2011-06-06 10:40:15
檢查此問題:http:// stackoverflow .com/questions/4369537/update-ui-from-thread – Flo 2011-06-06 10:43:14