我有一個小問題。當onStartCommand()被觸發時,我有一個獲得SingleTon線程的服務。線程或Runnable如何立即被殺死
public int onStartCommand(Intent intent, int flags, int startId)
{
Thread t = myThreadFactory.getConnectionThreadWhatever();
if (t.isAlive() && !t.isinterrupted())
{
// do actions when thread is already alive
}
else
{
// do actions to start and run the thread. e.g. t = new ConnectionThread().start();
}
}
現在線程需要循環這就好比一個Runnable(僞!)
public static boolean isRunning = false;
public void run()
{
isRunning = true;
while (isRunning)
{
// open the httpconnection with a (read)timeout of 300 (long polling, whatever)
}
}
現在我=我想盡快殺死線程作爲連接在網絡中廣播下降接收者或任何情況。
什麼是常見的方式瞬間殺死它沒有(例如300秒)發生超時之前等待?
目前,我在另一個類
public void stopThreadconnectionInstantlyWhatever()
{
ConnectionThread.isRunning = false;
Thread t = myFactory.getConnectionThread();
t.interrupt();
}
這樣做現在的問題似乎是,線可能會等到timout發生,但每一秒都是應該避免的更多電量。所以......任何想法? :-)
嗯,我能得到一個Singleton模式的HttpURLConnection的藏漢並殺死它超時出現之前,但是這僅僅是一個案件
@EmanuelSeibold Thread.sleep()方法拋出一個InterruptedException,並且將停止在被中斷。在httpconnection的文檔中沒有地方處理線程的中斷? – Cruncher
@EmanuelSeibold通常有一種優雅的做事方式。如果有什麼東西等待或阻塞很長一段時間,幾乎總是有某種方法可以在不終止線程的情況下將其喚醒。你按照個案處理這些事情。這是他們不贊成使用'Thread.stop()'的原因,因爲總有更好的方法。我們需要更多關於正在等待的細節,因爲這會改變如何喚醒它。 – Cruncher
查看道格拉斯施密特的視頻:http://youtu.be/wpEeZUjTiS4?t=4m17s –