2013-05-13 70 views
1

我真的被困在這裏,我已經閱讀了很多有關android的線程,但我無法找到適合我的項目的答案。線程和事件

我有一個前端(管理GUI)和一個後端(管理數據和東西)。我需要在後臺完成運行線程後立即更新GUI,但我無法弄清楚如何!

Main.java包前端

public class Main extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Thread thread = new Thread() { 
     @Override 
     public void run() { 
      Server server = new Server(getApplicationContext()); 
     } 

    }; 
    thread.start(); 

Server.java封裝後端

public static List<String> lista = new ArrayList<String>(); 
public Server(Context context) { 
    Revisar archivo = New Revisar(); 
    archivo.DoSomething(); 
} 

archivo.doSomething後完成我需要更新保存在靜態列表中的後端數據的GUI。

有什麼建議嗎?

回答

0

正如你猜測的那樣,你不能從後臺線程更新GUI。

通常,要做你想做的事情,你使用消息處理機制將消息傳遞給GUI線程。通常情況下,您會傳遞一個Runnable,它將在GUI線程中執行。如果您已將Handler分類並添加了處理消息的代碼,則還可以傳遞Message

消息傳遞給處理程序。您可以在GUI線程中創建自己的Handler,也可以使用其中一個已存在的Handler。例如,每個View對象都包含一個Handler。

或者您可以簡單地使用runOnUiThread()活動方法。

模式1,處理器加上可運行:

// Main thread 
private Handler handler = new Handler(); 

    ... 

// Some other thread 
handler.post(new Runnable() { 
    public void run() { 
    Log.d(TAG, "this is being run in the main thread"); 
    } 
}); 

模式2,處理機加上消息:

// Main thread 
private Handler handler = new Handler() { 
    public void handleMessage(Message msg) { 
    Log.d(TAG, "dealing with message: " + msg.what); 
    } 
}; 

    ... 

// Some other thread 
Message msg = handler.obtainMessage(what); 
handler.sendMessage(msg); 

模式3,調用runOnUiThread():

// Some other thread 
runOnUiThread(new Runnable() {  // Only available in Activity 
    public void run() { 
    // perform action in ui thread 
    } 
}); 

模式4,將Runnable傳遞給視圖的內置處理程序:

// Some other thread 
myView.post(new Runnable() { 
    public void run() { 
    // perform action in ui thread, presumably involving this view 
    } 
}); 
+0

在你提到的所有模式中,所有線程都在主活動中運行。我的問題是線程正在另一個類上運行,並在另一個包中運行 – 2013-05-14 00:11:22

+0

您是指整個單獨的應用程序?還是服務? – 2013-05-14 00:25:31

+0

幾乎整個單獨的應用程序。我使用後端來處理數據,因爲我被教導應該總是嘗試使用MVC。所以後端是一個包含兩個類的包,可以幫助我處理數據。 – 2013-05-14 00:27:30