如何使Async任務在一段時間間隔之後重複執行,就像Timer ...其實我正在開發一個應用程序,它將自動從服務器下載所有最新的未讀問候語,目的我必須檢查更新從服務器經過一段固定的時間間隔後....我知道這可以通過計時器輕鬆完成,但我想使用異步任務,我認爲它對android應用程序更有效。如何在固定的時間間隔內重複執行異步任務
回答
public void callAsynchronousTask() {
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
PerformBackgroundTask performBackgroundTask = new PerformBackgroundTask();
// PerformBackgroundTask this class is the class that extends AsynchTask
performBackgroundTask.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(doAsynchronousTask, 0, 50000); //execute in every 50000 ms
}
你可以處理程序:
private int m_interval = 5000; // 5 seconds by default, can be changed later
private Handle m_handler;
@Override
protected void onCreate(Bundle bundle)
{
...
m_handler = new Handler();
}
Runnable m_statusChecker = new Runnable()
{
@Override
public void run() {
updateStatus(); //this function can change value of m_interval.
m_handler.postDelayed(m_statusChecker, m_interval);
}
}
void startRepeatingTask()
{
m_statusChecker.run();
}
void stopRepeatingTask()
{
m_handler.removeCallback(m_statusChecker);
}
但我會建議你檢查這個框架:http://code.google.com/intl/de-DE/android/c2dm/是一種不同的方法:當事情是準備服務器將通知電話(因此,節省了一些帶寬和性能:))
感謝alot.Actually我只是發展application.Server側的客戶端已經工作了爲iPhone開發的同一個應用程序,我不得不使用的Android – Waseem
在同一臺服務器我是新來穿線在android中。你在哪裏把runnable傳遞給處理程序? –
回答@DheeB,回答者在這裏沒有提到它,儘管它應該在實例化過程中像這樣m_handler = new Handler(m_statusChecker);此解決方案可能無法正常工作的另一個原因,因爲問題清楚地表明將有網絡操作「自動從服務器下載所有最新的未讀問候語」..但是,儘管您正在使用處理程序,但此處理程序/ runnable仍在運行在仍然阻塞的UI線程中。您需要手動在單獨的線程中啓動它。 – tony9099
//Every 10000 ms
private void doSomethingRepeatedly() {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
try{
new SendToServer().execute();
}
catch (Exception e) {
// TODO: handle exception
}
}
}, 0, 10000);
}
建議您在Android文檔https://developer.android.com/reference/java/util/Timer.html中使用Timer上的ScheduledThreadPoolExecutor來支持所有新代碼 –
- 1. 什麼應該用於在android中以固定間隔重複執行任務?
- 2. 如何在固定時間間隔內運行magento中的cron.php
- 3. 如何在特定的時間間隔內執行JavaScript代碼?
- 4. 如何將大量任務劃分爲小任務並在特定時間間隔內執行,在php
- 5. 通過一定間隔的時間間隔通過線程執行任務
- 6. 實現按時間間隔調用的異步任務
- 7. 如何在固定的時間間隔後重新列表listview?
- 8. 重複在設定的時間間隔
- 9. 在進程內每隔一段時間執行一次任務
- 10. 如何確保定時記錄在固定的時間間隔?
- 11. 任務執行時間高於定時器執行時間
- 12. 在特定時間執行任務
- 13. ThreadPoolScheduler間隔小於任務的執行時間
- 14. 在特定時間間隔後執行任務的最佳做法是什麼?
- 15. 如何執行日期/時間間隔
- 16. 在蟒蛇在特定時間間隔運行任務
- 17. 特定時間間隔重複報警
- 18. 自定義UILocalNotification重複時間間隔
- 19. 在某個固定的時間間隔內檢索數據
- 20. 在Elixir中異步運行長時間運行的任務
- 21. 異步任務不執行
- 22. ANR執行異步任務
- 23. 如何在固定的時間間隔後滑動文本
- 24. 如何NServiceBus發佈()在固定的時間間隔
- 25. MPAndroidChart:如何在固定的時間間隔
- 26. Node.js的異步時間過長執行
- 27. 如何在異步時間間隔刷新HTML iframe?
- 28. 如何重複本地通知自定義的時間間隔
- 29. 如何在固定的時間間隔內找到網絡數據的大小?
- 30. iPhone cron(在指定時間內執行任務)
非常感謝.... – Waseem
一個異步任務無論如何運行在自己的線程。爲什麼在處理程序上運行它? – Siddharth
是的,異步任務在單獨的線程上運行,但不能從UI線程以外的其他線程啓動。我想這個處理程序是允許的。 – r1k0