我一直在阅读很多关于线程,处理程序,loopers等的内容,我很困惑.在我的应用程序中,我希望第一个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切换到不同的活动时,需要通知bgworker,以便它可以开始请求与新Activity布局相关的数据.告知工人改变的最佳方法是什么?难道我不能在BgWorkerThread类中创建一个可在活动加载时调用的公共方法吗?