我想每10分鐘運行一個特定的方法doThis()
(這不是CPU密集型操作,它只是一個POST服務器),當該方法完成執行時,通知用戶(通過Toast
或Notification
或某物)。但我不想阻塞UI線程,因爲我期望用戶仍然在與UI進行交互。什麼是最有效的方法來做到這一點?通過Handler
?或者Service
或某種(即IntentService
)?以設定的時間間隔執行方法的最有效方法?
回答
國際海事組織最乾淨和最有效的方式是使用ScheduledThreadPoolExecutor,查看我的回答here代碼示例,希望這可以幫助。
我會推薦定時器類如你所說你必須執行定時任務。 如果您需要執行此操作,而您的活動運行 可以使用定時器類的活動本身別人一樣,你可以把它的服務在後臺運行..
請參閱本鏈接。 :http://developer.android.com/resources/articles/timed-ui-updates.html
我反對定時器的建議。除了這些人之外,我一直沒有遇到任何問題,特別是在異常處理方面。定時器幾乎只是吞下它們,讓你想知道它的工作與否的天氣。 – 2011-12-20 04:29:32
我很遺憾聽到你的經歷,但直到日期我有完美的功能。 – Abhinava 2011-12-20 08:55:15
我通過AsyncTask
做到這一點的用戶。該doInBackground()
方法看起來是這樣的(只是一個僞代碼):
doInBackground(String... params){ while (running){ doThis(); Thread.sleep(10 * 1000); } }
我想補充一點,我的應用程序執行這些更新(GET和POST)更頻繁(每隔5-10秒),並顯示給用戶帶來新的價值 - 這就是我使用活動的原因。相反,您可以從服務中啓動AsyncTask。
你擁有的另一個選擇是使用AlarmManager
--儘管我還沒有走上這條道路。
如果用戶切換應用程序,AsyncTask仍會在後臺運行嗎? – 2011-12-21 14:27:03
是的,除非你採取措施防止這種情況發生。就我而言,我從一個Activity開始'AsyncTask'。在'onPause()'中,我「暫停」任務(使用一些自定義邏輯)。如果您從「服務」開始執行任務,則可以選擇允許它在後臺繼續。 – curioustechizen 2011-12-22 04:47:00
- 1. Java:以指定的時間間隔執行方法
- 2. 測量方法執行時間的有效方法
- 3. 通過指定時間間隔填充頁面的最有效方法?
- 4. C++ 11計時庫 - 如何在特定的時間間隔後執行方法?
- 5. 執行&&的最有效方法?
- 6. 如何設置方法的最大執行時間?
- 7. 以小時間塊查詢cassandra的最有效方法
- 8. 執行的方法來檢查的時間和特定的時間執行的方法
- 9. java中的方法執行時間
- 10. 查找方法的執行時間
- 11. 定時器間隔調用長方法
- 12. 方法與時間間隔(asp.net C#)
- 13. 在定時間隔播放聲音的最佳方法?
- 14. 測量方法執行時間的基本方法
- 15. 運行一定的時間的方法
- 16. 在特定時間間隔後執行任務的最佳做法是什麼?
- 17. AJAX以設定的時間間隔運行onload並且以設定的時間間隔
- 18. 在規律的時間間隔後調用特定方法
- 19. 如何估計方法執行時間?
- 20. 我可以有多個方法在同一時間執行?
- 21. 在Android中執行時間表的最佳方法?
- 22. 通過時間戳檢索數據的最有效方法
- 23. 什麼是測量時間最有效的方法?
- 24. 創建函數的方法效果每隔一段時間
- 25. 有沒有辦法以預定義的時間間隔運行存儲過程?
- 26. 計算空間和時間一致性的有效方法
- 27. 根據函數執行時間設置定時器間隔
- 28. 選擇時間戳快照之間更改的最有效方法
- 29. 在SQL中存儲/更新基於時間間隔的數據的最有效方法是什麼?
- 30. 每行執行多個標量函數的最有效方法
我稱之爲「關機()」後。如果我選擇啓動相同的ScheduledThreadPoolExecutor備份,我會被允許嗎?或者我將不得不創建實例? – 2011-12-21 13:52:36
如果用戶更改應用程序,執行程序是否會在後臺運行? – 2011-12-21 14:20:03
@MohitDeshpande,很好的問題,在調用shutdown()之後,如果你想再次使用它,你需要初始化一個新的。否則在嘗試提交新任務時會得到RejectedExecutionException。對於你的第二個問題,我想是的,但不是100%肯定的,最好自己嘗試一下。 – yorkw 2011-12-21 19:52:39