2012-03-04 35 views
1

我有這個東西好像用的TimerTask一起重新安排一個計時器,以使我的服務/持續的過程,在不同的時間來執行的非常枯燥的事情......我已經嘗試搜索許多論壇,包括this example這似乎已經爲這個人工作,但當我嘗試在我的服務相同的代碼,我得到以下錯誤:Android開發人員:重新安排Timer和TimerTask

03-04 14:21:41.204:E/AndroidRuntime(336):致命例外:計時器-0

03-04 14:21:41.204:E/AndroidRuntime(336):java.lang.RuntimeException:無法創建處理程序insid Ë線程已經不叫Looper.prepare()

有誰知道這是什麼錯誤意味着,什麼可以是一個可能的解決方案?從我在網上進行搜索關於此錯誤的:它通常當我嘗試做用戶界面的變化,在非UI線程...在我的情況下發生的,我要做的就是發出一個通知,然後調用一個函數reScheduleTimer像這個例子...

任何輸入被理解...

編輯: 這裏是其吹起來的代碼:

public void reScheduleTimer(long duration) { 
    Log.v(TAG, "Inside reScheduleTimer"); 
    timer.cancel(); 
    timer = new Timer("profileSwitcherTimer", true); 
    timerTask = new MyTimerTask(); <---- 
    timer.schedule(timerTask, duration); 
} 

這裏是MyTimerTask類:

public class MyTimerTask extends TimerTask{ 
private Handler updateUI = new Handler(){ 
     public void dispatchMessage(Message msg) { 
      Toast.makeText(getApplicationContext(), "Timer Ran", Toast.LENGTH_LONG).show(); 
     } 
} 

public void run() { 
    ....code that i want execute 
    showNotification(); 
    reScheduleTimer(60000); 
} 

}

+0

你能後的代碼塊了該異常被拋出?如果我們能夠看到你已經寫過的內容,那將會更有幫助。 – Robert 2012-03-04 19:41:43

+0

@Robert:編輯原帖與即時通訊與工作的代碼片段... – 2012-03-04 19:57:38

回答

0

你在不有消息循環線程創建的處理程序。由於Looper文件說:

Threads by default do not have a message loop associated with them; to create one, call prepare() in the thread that is to run the loop, and then loop() to have it process messages until the loop is stopped.

一個解決這個問題的辦法是處理程序實例顯式綁定可以將特定尺蠖,通過處理程序構造函數之一。最簡單的方法就是使用主要的活套進行應用程序;你可以通過靜態的方法獲得它。缺點是,這會將你的處理程序綁定到UI線程,本身並不是那麼糟糕,只要你不需要做太長的操作;否則你的用戶界面將無法響應。

+0

OMG ......我簡直不敢相信it..i一定花了很多時間試圖瞭解爲什麼這個開始颳起了突然的。 ..in處理程序,所有我所做的是outputing舉杯消息...我不明白是它是如何炸燬,即使我不叫updateUI .. – 2012-03-04 20:23:32

+0

了'TimerTask'實例的構造函數調用隱式的構造函數'updateUI'處理程序,並導致崩潰。 – 2012-03-05 03:20:17

相關問題