我有一个在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 05:08:31
在onDestroy()方法中,尝试
thread.interrupt();
thread=null;发布于 2012-08-05 06:05:08
我对Android还是个新手,但我会试一试:
您确定调用了onDestroy()方法吗?也许您只是使用Home或Back按钮退出应用程序,在这种情况下,根本不需要调用onDestroy()方法,如本页上的图表所示:Activity Lifecycle - Pausing
也许你想让线程在应用程序变得“隐藏”时停止工作,并将其放入onStop()中:
loopcontrol = false;
thread.interrupt();
thread=null;如果是这样的话,当你返回/重新启动应用程序时,onCreate()也不一定会被调用,所以也许线程启动应该在onResume()中?
发布于 2012-08-05 06:36:02
你想要达到什么目的?
在这种情况下,从一个活动回调方法启动后台线程可能不是一个好主意。活动可能会被销毁并从头开始重新创建(例如,这是旋转手机时的默认行为),在这种情况下,您将失去您的线程...
更好的方法可能是创建Service...但是这里有很多关于tcp通信的问题/答案,来自activity/Services/other things。
https://stackoverflow.com/questions/11811981
复制相似问题