Android线程不会停止运行

时间:2011-05-18 16:38:16

标签: android multithreading

我有一个执行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并再次启动该线程时,就会发生崩溃。