我有一个在onStart()方法中创建线程的活动。Thread用于通过TCP读取网络数据,并且在while循环中有一个阻塞的网络读取方法,该方法在每个增量上检查一个布尔变量。
我的问题是,当使用back键销毁活动时,我将布尔循环控制变量的值设置为false,但线程不会结束,因为它停留在阻塞的网络方法上。
public class MyActivity extends Activity implements Runnable
{
Thread thread;
boolean loopControl;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
protected void onStart()
{
super.onStart();
loopControl=true;
thread = new Thread(this);
thread.start();
}
public void run()
{
while(loopControl)
{
directories = (Vector<String>) TCPFunctions.inputStream.readObject();
}
}
protected void onDestroy()
{
super.onDestroy();
loopcontrol = false;
}
}我如何完成我想要的线程,因为它会在再次启动此活动时产生问题。
实际上,每次活动启动时,它都会从服务器读取一些数据
发布于 2012-08-05 06:36:02
你想要达到什么目的?
在这种情况下,从一个活动回调方法启动后台线程可能不是一个好主意。活动可能会被销毁并从头开始重新创建(例如,这是旋转手机时的默认行为),在这种情况下,您将失去您的线程...
更好的方法可能是创建Service...但是这里有很多关于tcp通信的问题/答案,来自activity/Services/other things。
https://stackoverflow.com/questions/11811981
复制相似问题