我有執行web請求基本異步任務。該線程不包含在循環或任何內容中,它執行請求並從run()
返回。當我嘗試執行另一個請求時,使用該線程,我得到一個拋出的異常,因爲該線程已經在運行。我已搜索周圍有很多在這個網站尋找答案,但都似乎要拿出被停止了在一個循環的線程,基本上迫使線程返回。Android的線程不會停止運行
如果我只是把線程的請求代碼進入一個循環,在某些種類標誌的等待從主線程告訴它繼續前進,再次執行?像:
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
得到由紗線之上完成後調用,那麼我的權利,你可以看到後執行另一個請求。當我嘗試在WebServiceHelper
再次呼籲Execute
,再次啓動線程的碰撞正在發生的事情。
你將有一個更容易得到與提高與真正的堆棧跟蹤真正的例外,所有這些都在這個問題提供真正的代碼幫助。像「當我嘗試執行另一個請求,使用線程,我得到一個異常拋出,因爲線程已經運行」抽象的東西是很難讓別人來分析,因爲我們沒有讀心術,因此不一定識別特定例外或理解你如何試圖重用該線程。 – CommonsWare 2011-05-18 16:43:41
我們需要更多的上下文才能在這裏爲您提供幫助。某種調試信息會有所幫助。 – 2011-05-18 16:44:53
增加了一些代碼到這個問題 – 2011-05-18 17:03:56