0

我开始学习 android 我一直在玩它,到目前为止一切都很好,但我对服务有一些疑问,我今天开始学习它们,所以如果说一些非常错误的事情,请轻轻地学习它们。

例如,我希望我的应用程序不时通过互联网获取一些信息,这个轮询周期由用户定义,然后 UI 得到更新。我想创建一个每 30 分钟运行一次的服务,获取信息并更新 UI。

如果我做对了:

  • IntentService 只是执行一个操作并自行停止通过意图发送结果(对吗?),所以我认为这不是我想要的。
  • 当您想要 IPC 或允许从外部应用程序绑定时,最有可能使用有界服务,我再次认为这不是我想要的。

我认为本地服务可能是我需要的,使用 LocalBroadcastReceiver 更新 UI,我怎样才能让它每 X 分钟运行一次操作(处理程序 postDelayed、ScheduledExecutorService 或警报管理器?)

如果我理解正确,如果没有限制的服务可以无限运行,如果它没有因内存不足问题而被杀死,那么使其成为前台服务是最安全的吗?

最后一件事,这是一个菜鸟疑问,如果用户离开应用程序(单击主页按钮或打开其他应用程序),应用程序仍处于后台但活动处于“暂停”或“停止”模式,服务仍然能够跟他们说话?

抱歉发了很长的帖子,谢谢。

4

2 回答 2

1

您的要求:每 x 分钟后,启动一项服务,拉一些日期,更新 UI。

解决方案 :

  1. 为每 x 分钟定义或设置一个警报,以触发接收器。
  2. 从接收器启动服务。
  3. 在服务中,启动一个异步任务 来获取doInBackGround().
  4. 获取数据后,从向您的活动onPostExecute() 发送广播。
  5. 在活动中,有一个为从服务发送的广播注册的动态接收器。
  6. 从动态广播接收器更新 UI。
于 2013-12-02T13:26:22.480 回答
0

根据您的解释,我不会亲自使用服务。

服务上的 Android 文档解释更多,但这里有一个片段:

http://developer.android.com/guide/components/services.html

Service 是一个应用程序组件,可以在后台执行长时间运行的操作,并且不提供用户界面。

您也许可以考虑使用 AsyncTask,特别是考虑到您只希望它在应用程序运行时运行:

http://developer.android.com/reference/android/os/AsyncTask.html

此类允许在 UI 线程上执行后台操作并发布结果,而无需操作线程和/或处理程序。

关于如何以特定时间间隔重复运行 AsyncTask 有一个很好的答案:如何在固定时间间隔后重复执行 Async 任务

于 2013-08-30T08:17:04.993 回答