![](/img/trans.png)
[英]My activity get blinked when I open it using TimerTask in Android
[英]Why do I get this error in my TimerTask?
08-17 18:26:44.540: E/AndroidRuntime(2405): FATAL EXCEPTION: Scheduler
08-17 18:26:44.540: E/AndroidRuntime(2405): java.lang.IllegalThreadStateException: Thread already started.
08-17 18:26:44.540: E/AndroidRuntime(2405): at java.lang.Thread.start(Thread.java:1045)
08-17 18:26:44.540: E/AndroidRuntime(2405): at com.example.simpledownloader.scheduler.Scheduler.run(Scheduler.java:21)
08-17 18:26:44.540: E/AndroidRuntime(2405): at java.util.Timer$TimerImpl.run(Timer.java:284)
因此,我有一個TimerTask
,它通過蠻力檢查所有未完成的下載。
下載都是Thread
存儲在一個Vector
。 一旦TimerTask
看到線程已准備就緒,它將在其上調用start()
。 這是代碼:
碼:
package com.example.simpledownloader.scheduler;
import java.util.TimerTask;
import android.util.Log;
import com.example.simpledownloader.sharable.Sharable;
import com.example.simpledownloader.task.Task;
public class Scheduler extends TimerTask {
//------------------------------------------------------------------------------
@Override
public void run() {
if(Sharable.getShouldLook()){ // Should we look for pending tasks ?
for(Task each: Sharable.downloads){ // Yes, then loop
if(each.isAlive()==false){ // Thread is not running ?
Log.v("SCHEDULER", "NOT RUNNING");
if(each.getReadiness() == true){ // Is it ready ?
each.start(); // Start !
break; // stop looping
}
}
}
}
}
//------------------------------------------------------------------------------
}
為什么我不斷收到該錯誤?
Timer
設置如下:
Sharable.schedulerTimer.scheduleAtFixedRate(Sharable.schedulerTask, 1000, 1000); // start scheduler
如果isAlive()
返回false,則在啟動線程之前進行檢查。 有兩種方法不足以阻止您獲得IllegalThreadStateException
:
另一個線程正在啟動對isAlive()
的調用與對start()
的調用之間的下載線程,或者
下載線程將終止,而不會從Sharable.downloads
集合中刪除。
我懷疑后者的可能性更大,所以這就是我開始尋找的地方。 另外,如果您希望在完成下載后將線程保留在下載集合中,則可能需要嘗試each.getState() == Thread.State.NEW
而不是each.isAlive() == false
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.