我一直在阅读关于线程、处理器、循环等方面的资料,但是我非常困惑。在我的应用程序中,我想让第一个活动启动后台工作程序。该后台工作程序将不断从TCP套接字请求数据,并(希望)在数据到达时将新信息发布到UI线程。如果用户转换到新活动,则后台需要继续执行其任务,但仅向UI线程发送不同的消息,以便可以相应地更新新布局。
以下是我目前已经实现的内容...这是我的主要活动文件。
在另一个文件中,我这样定义了我的后台工作线程...
如果UI切换到另一个Activity,这个线程会继续运行吗?此外,这个线程如何知道要将消息发送给哪个Activity?显然,我希望它总是将数据发送到当前活动的Activity。那会自动发生吗?
最后,当UI切换到不同的activity时,需要通知bgworker,以便它可以开始请求与新Activity布局相关的数据。通知工作程序更改的最佳方法是什么?我不能只是在BgWorkerThread类中创建一个公共方法,以便在Activities加载时调用吗?
以下是我目前已经实现的内容...这是我的主要活动文件。
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?显然,我希望它总是将数据发送到当前活动的Activity。那会自动发生吗?
最后,当UI切换到不同的activity时,需要通知bgworker,以便它可以开始请求与新Activity布局相关的数据。通知工作程序更改的最佳方法是什么?我不能只是在BgWorkerThread类中创建一个公共方法,以便在Activities加载时调用吗?