我一直在閱讀很多關於線程,處理程序,loopers等,我很困惑。在我的應用程序中,我想讓第一個Activity啓動一個後臺工作器。這個後臺工作人員將不斷請求來自TCP套接字的數據,並且(希望)在數據到達時將新信息發佈到UI線程。如果用戶轉換到新的Activity,背景需要繼續做這件事,但只發送不同的消息到UI線程,以便它可以相應地更新新的佈局。Android:正確的方式將消息從後臺線程傳遞到UI線程?
這裏是我迄今爲止...這是在另一個文件中定義我我的背景工作者線程像這樣我的主要活動文件
public class MyTCPTest extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set the layout
setContentView(R.layout.main);
// create a handler to handle messages from bg thread
Handler handler = new Handler();
BgWorkerThread bgw = new BgWorkerThread();
bgw.start();
}
...
public class BgWorkerThread extends Thread {
@Override
public void run(){
while(true)
{
try {
// simulate a delay (send request for data, receive and interpret response)
sleep(1000);
// How do I send data here to the UI thread?
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
如果UI切換到不同的Activity會使這個線程繼續運行?另外,該線程如何知道將消息發送到哪個活動?顯然,我希望它始終將數據發送到當前活動的活動。這是否會自動發生?
最後,當UI切換到不同的活動時,需要通知bgworker,以便它可以開始請求與新的活動佈局相關的數據。告知員工這一變化的最佳方式是什麼?我不能只在BgWorkerThread類中創建一個可以在活動加載時調用的公共方法嗎?
特拉維斯感謝您的鏈接,但我仍然感到困惑。不同的是,你的所有代碼似乎都在同一個類中。我的後臺工作人員是它自己的類,擴展線程。這是一個獨立於Activity類的類,因此如何訪問該類/活動的處理程序? – PICyourBrain