Timer物件執行定時任務只執行一次的問題
阿新 • • 發佈:2019-02-20
最近在做物聯網專案,用到了Socket長連線方面的技術,找了很多這方面資料,都說保持長連線的方法最常見的就是定時傳送垃圾訊息讓客戶端與服務端的網路不斷開。於是用到了Timer物件來定時傳送垃圾訊息,可是卻遇到了TimerTask只執行一次就不再執行的問題。
task執行部分是這樣寫的:
我的本意是讓task每隔30000毫秒執行一次,但仔細檢視API後發現,這個方法的意思是延時多少毫秒後執行此task。
class Task extends TimerTask { @Override public void run() { Log.d("com.xxx.xxx.service", "timertask -------- running!"); Packet packet = new Packet(); packet.pack("WVM|1\r\n"); send(packet); } }
task執行部分是這樣寫的:
timer = new Timer(true);
timer.schedule(new Task(), 30000);
我的本意是讓task每隔30000毫秒執行一次,但仔細檢視API後發現,這個方法的意思是延時多少毫秒後執行此task。
schedule(TimerTask task, long delay)的註釋:Schedules the specified task for execution after the specified delay。
後來我更換成:
執行就正常了。timer = new Timer(true); timer.schedule(new Task(), 5000, 30000);
schedule(TimerTask
task, long delay, long period)