【发布时间】:2013-03-27 05:37:14
【问题描述】:
我已经阅读了很多关于线程、处理程序、looper 等的内容,但我很困惑。在我的应用程序中,我想让第一个 Activity 启动一个后台工作人员。这个后台工作人员将不断地从 TCP 套接字请求数据,并(希望)在数据到达时将新信息发布到 UI 线程。如果用户转换到一个新的 Activity,后台需要继续做这件事,但只向 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,这个线程会继续运行吗?另外,这个线程如何知道将消息发送到哪个活动?显然,我希望它始终将数据发送到当前处于活动状态的 Activity。这会自动发生吗?
最后,当 UI 切换到不同的 Activity 时,需要通知 bgworker 以便它可以开始请求与新 Activity 布局相关的数据。将变更通知员工的最佳方式是什么?难道我不能在 BgWorkerThread 类中创建一个可以在加载活动时调用的公共方法吗?
【问题讨论】: