我需要实现一个后台任务,需要每10秒更新一次UI。我尝试了以下方法,但其中大多数都失败了。Android - 高频后台任务
1)AlarmManager
我通过AlarmManager开始的意图的服务。看起来AlarmManager只适用于非常低的频率,比如几个小时。如果我将其设置为10秒,那么界面不再响应。这是为什么?意图服务不在单独的线程中运行吗?
2)IntentService用无限循环和的Thread.sleep
应用在约30秒后终止,UI是不响应的。意图服务仅用于非常短的后台任务吗?我发现与此相矛盾的信息。为什么UI没有响应,尽管意图服务应该在单独的线程中运行?
3)的AsyncTask
当使用的AsyncTask中,UI保持响应。但由于某些原因,没有其他AsyncTask从UI启动。我听说过并发AsyncTasks的一些限制,但2应该不会太多?
4)自己的线程
工作。后台服务和用户界面功能齐全。但是,我读到更新UI时直接使用线程是不好的做法。在这种情况下将数据发送到活动的最佳方式是什么?
对于需要更新UI并每10秒重新获得一次后台任务,您有什么建议?
此致敬礼!
“如果我将它设置为10秒,那么UI不再响应,为什么?” - 因为你的代码中有一个错误。 “为什么用户界面没有响应,尽管意图服务应该在单独的线程中运行?“ - 因为你的代码中存在一个bug”我听说过一些并发AsyncTasks的限制,但是2应该不会太多?“ - ”AsyncTask“在Android 3.2+上被序列化,其targetSdkVersion为13或请参阅[AsyncTask'文档](http://developer.android.com/reference/android/os/AsyncTask.html)中的“执行顺序”。 – CommonsWare 2015-01-09 22:43:03
“我读过使用线程是不好的做法直接更新UI“ - 从后台线程更新'View'通常会导致崩溃。假设你正在做一些事情来解决这个问题(例如'runOnUiThread()'),或者只更新那些是安全地在后台线程上更新(例如'ProgressBar')。“你有什么建议...” - 这取决于其他信息,比如当用户离开你的应用程序时会发生什么事情 – CommonsWare 2015-01-09 22:45:04
@CommonsWare' CommonsWare'正在以非常特定的方式回答你的问题,我建议你现在问他:'为什么我有一个bug'当然提供代码:) – Mike 2015-01-09 22:45:05