我試圖在指定的時間(即每隔幾秒鐘,雖然此速率可能會在運行時更改)異步並重復執行任務(即從文本文件加載數據)。如何實現一個執行AsyncTask的Timer/TimerTask? (Android)
我已經做了一些研究,並決定這將需要一個AsyncTask或一個單獨的線程。爲了簡單起見,我決定使用AsyncTask。
我現在需要根據重複計時器計劃執行此AsyncTask。我相信我必須使用Timer和TimerTask。
下面的代碼是我試圖實現的簡單形式。當我嘗試使用Android模擬器(通過Eclipse IDE)運行此代碼時,出現以下消息:「對不起!應用程序意外停止,請重試。」
我想知道問題出現在哪裏以及如何修復它。謝謝!
public class Sample extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SimpleTimerTask myTimerTask = new SimpleTimerTask();
long delay = 0;
long period = 5000;
Timer myTimer = new Timer();
myTimer.schedule(myTimerTask, delay, period);
}
private class SimpleAsyncTask extends AsyncTask<Void, Void, Void> {
protected Void doInBackground(Void... params) {
return null;
}
}
private class SimpleTimerTask extends TimerTask {
public void run() {
new SimpleAsyncTask().execute();
}
}
}
編輯:這裏是logcat的消息,似乎是有關
致命異常:定時器0
java.lang.ExceptionInInitializerError
在...
由於:java.lang.RuntimeException:無法在未調用Looper.prepare()的線程中創建處理程序()
at ...
logcat中的日誌說什麼?你可能會在那裏找到一個堆棧跟蹤,這表明你的問題。 – Kaj 2011-05-25 14:56:46
@Kaj - 這是一個非常有用的評論(對於像我這樣的初學Android開發者至少)。我甚至不知道LogCat是什麼,但現在我看到它的調試/錯誤跟蹤的價值。 – 2011-05-31 19:07:13