我的一條線索是創建另一個線程在特定的時間間隔內執行某些操作。它由定時器來完成。如何正確終止/清除/停止/取消從另一個線程啓動的線程?
現在,當原始線程停止時,另一個線程仍在運行,我無法停止。
我怎樣才能正確地終止了「線」?:
Thread thread = new Thread() {
@Override
public void run() {
try {
while (true) {
sleep(1000);
// do something
}
} catch (InterruptedException e) {
Log.e(TAG,"new invoked caught the exception!");
return;
}
}
};
public void run() {
while (true) {
try {
Log.d(TAG,"ConnectedThread.run: Reading from InStream socket");
while (true) {
thread.start();
Log.e(TAG,"starting additional thread");
// Read from the InputStream
int inB;
inB = mmInStream.read();
if (inB != -1) mAccessoryInfo.addCharacter((byte) inB);
}
} catch (IOException e) {
Log.e(TAG, "TADA InStream read exception, disconnected "
+ e.getMessage());
// stopService(new Intent(getBaseContext(), Pinger.class));
thread = null;
connectionLost();
break;
}
}
}
一般來說,你不想在你的線程中有一個while(true)循環。創建一個標誌變量(例如「運行」),並使用while(running)代替。這允許線程在運行= false時自行結束,並且可以使用Thread.join()來阻塞,直到它結束。 – thomas88wp 2013-03-06 05:16:42
如果您正在啓動的第二個線程可以按性質在循環中運行,那麼可以考慮使用布爾值來跳出循環並允許它正常終止,而不是中斷它或試圖停止它。就像上面thomas88wp建議的那樣 – 2013-03-06 05:18:35