[問題] Thread

看板AndroidDev作者 (平凡)時間7年前 (2017/04/02 16:24), 7年前編輯推噓2(2015)
留言17則, 6人參與, 最新討論串1/1
http://ideone.com/bVJ1J4 請問一下 為什麼我button2可停止runnable1 但i=100那邊就不行 我有讀log,有執行removeCallbacks說 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.34.229.62 ※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1491121466.A.DB9.html

04/02 18:58, , 1F
我猜是i初始化的位置不對,你全部都使用runnable1
04/02 18:58, 1F

04/02 18:59, , 2F
所以i只會被初始化一次,你執行第二次後i都會大於100
04/02 18:59, 2F

04/02 19:05, , 3F
我好像看錯了0.0
04/02 19:05, 3F

04/02 21:26, , 4F
i的值有log出,是對的,只是數到100以上,停不下
04/02 21:26, 4F

04/02 21:40, , 5F
將 runnable 內的 remove的參數改為 this 看看
04/02 21:40, 5F

04/03 04:16, , 6F
run裡面最後的執行順序是 handler1.sendMessage →
04/03 04:16, 6F

04/03 04:18, , 7F
handler1.removeCallbacks → 結束換handler handleMessage
04/03 04:18, 7F

04/03 04:18, , 8F
→ handler1.post 以上最後結果就是handler再跑一次run
04/03 04:18, 8F

04/03 04:20, , 9F
解決方法就是最後加個else,把sendMessage放在else裡面
04/03 04:20, 9F

04/03 04:23, , 10F
需要再搞清楚handler、message queue的原理
04/03 04:23, 10F

04/03 04:25, , 11F
另外要注意new Handler(),這樣handler還是跑在main thread
04/03 04:25, 11F

04/03 04:28, , 12F
並沒有另一個thread
04/03 04:28, 12F

04/03 04:32, , 13F
其實run裡面的removeCallbacks是多餘的,post只會執行一次
04/03 04:32, 13F

04/03 04:32, , 14F
沒再sendMessage/post本來就不會再跑
04/03 04:32, 14F
※ 編輯: GooLoo (1.34.229.62), 04/03/2017 08:29:18

04/03 08:45, , 15F
感謝ssccg大大, 我有在各函式中加Log, 看跑的順序了
04/03 08:45, 15F

04/03 13:28, , 16F
你應該搞錯Handler的用法了
04/03 13:28, 16F

04/03 14:38, , 17F
這個不是thread...
04/03 14:38, 17F
文章代碼(AID): #1OuBKwsv (AndroidDev)