網上說Thread不需要stop()的原因是因爲運行到尾部就會自動釋放,而代碼:
01 |
Thread
myThread = new Thread( new Runnable()
{ |
02 |
03 |
@Override |
04 |
public void run()
{ |
05 |
//
TODO Auto-generated method stub |
06 |
Log.i( "thread" , "" +
count); |
07 |
while (runable)
{ |
08 |
|
09 |
count++; |
10 |
try { |
11 |
Thread.sleep( 100 ); |
12 |
} catch (Exception
e) { |
13 |
} |
14 |
Message
msg = mhandler.obtainMessage(FLAG_UPDATE, 0 , 0 ); |
15 |
mhandler.sendMessage(msg); |
16 |
} |
17 |
|
18 |
} |
19 |
}); |
在第二次start()的時候,系統拋出異常:java.lang.IllegalThreadStateException: Thread already started.
這是個很悲催的事情,而我現在也只能,這樣:
01 |
Thread
myThread = new Thread( new Runnable()
{ |
02 |
03 |
@Override |
04 |
public void run()
{ |
05 |
//
TODO Auto-generated method stub |
06 |
Log.i( "thread" , "" +
count); |
07 |
while ( true )
{ |
08 |
if (runable)
{ |
09 |
count++; |
10 |
try { |
11 |
Thread.sleep( 100 ); |
12 |
} catch (Exception
e) { |
13 |
} |
14 |
Message
msg = mhandler.obtainMessage(FLAG_UPDATE, 0 , 0 ); |
15 |
mhandler.sendMessage(msg); |
16 |
} |
17 |
} |
18 |
} |
19 |
}); |
不過這樣的犧牲就是有線程在無限循環...性能...
不知列位大牛是怎麼處理這裏的。
這個已經解決了,可以寫一個繼承Thread的類,或者寫一個Runnable,然後再new Thread(xx).start();就可以了,回頭看一下,真小白啊!
新代碼如下:
創建一個Runnable,用於Thread執行
1 |
Runnable
sendable = new Runnable()
{ |
2 |
3 |
@Override |
4 |
public void run()
{ |
5 |
//
TODO Auto-generated method stub |
6 |
7 |
} |
8 |
}; |
1 |
new Thread(sendable).start(); |