我有一个执行Web请求的基本异步任务。该线程不包含在循环或任何内容中,它执行请求并从run()
返回。当我尝试执行另一个请求时,使用该线程,我得到一个异常抛出,因为该线程已经在运行。我在这个网站上搜索了很多答案,但似乎所有这些都是停止循环中的线程,基本上迫使线程返回。
我是否应该将线程中的请求代码放入一个循环中,该循环等待来自主线程的某种标志,告诉它继续执行?像:
public void run()
{
while ( threadIsStillRunning )
{
while ( !threadShouldExecute )
{
//Sleep the thread
}
//Execute the request
}
}
编辑: 好的,这里是线程(这包含在我的一个类对象-WebServiceHelper中):
private Thread executeRequest = new Thread()
{
public void run()
{
//Meat of the code
isRunning = false;
}
}
然后我在同一个类(WebServiceHelper)中有另一个类方法:
private volatile boolean isRunning = false;
public void Execute(WebServiceHandler handler)
{
while ( isRunning )
{
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
isRunning = true;
r = handler;
executeRequest.start();
}
其中r只是一个接口对象,我用它来执行对执行请求的对象的回调。
然后在我的主要活动中(请求线程执行的那个我有这个:
private Runnable getSiteData = new Runnable(){
public void run(){
mWebServiceHelper.SetMethod("GetSiteData");
mWebServiceHelper.Execute(mySiteHelper);
}
};
public void downloadDidFinish(List<Map<String, String>> data)
{
// TODO Auto-generated method stub
TeamList.StoreTeams(data );
mHandler.post(getSiteData);
}
完成后,上面的线程会调用 downloadDidFinish
,然后我会在您看到之后立即执行另一个请求。当我尝试再次在Execute
上调用WebServiceHelper
并再次启动该线程时,就会发生崩溃。
答案 0 :(得分:2)