对服务执行长时间运行的操作

时间:2013-02-07 20:36:10

标签: android android-handler worker-thread

我正在构建一个拥有服务的应用程序。我知道所有应用程序组件都在同一个UI进程中运行,至少你在清单中指定它。所以为了避免ANR的消息,我有三种方法。

  1. 指定清单中的服务,以便在单独的流程中运行  android:process =“:remote”但我已经阅读了一些StackOverflow的帖子  说它不是一个好主意,因为它消耗了大量的电池和CPU处理。  我真的很尊重,因为那些帖子来自可信赖的人。

  2. 使用IntentService。这可能是一个很好的出路。但我需要我的服务运行即使  活动不可见。因为我需要服务不断检查新服务的Web服务  来自其他用户的消息并通知通知。是否可以使用  一个IntentService?这是一个优雅的解决方案。

  3. 使用本地服务。只是从清单文件中删除android:process =“:remote”属性。  但我得到一些...... OnMainThreadException错误。这意味着我需要创建一个特殊的  线程执行那些长时间运行的操作或使用AsyncTask,

  4. 也许有其他方法可以做到这一点。请告诉我,如何对服务执行长期运行操作。真是当务之急。

    感谢。

2 个答案:

答案 0 :(得分:3)

在UI线程中执行的Android服务。因此,您应该使用AsyncTask或其他方式来处理网络请求的线程。

答案 1 :(得分:1)

首先,我们接受有2个部分:活动部分(网络)和下一个活动部分之前的一些睡眠部分。我认为您可以使用普通的本地IntentService作为活动部件。完成后的每个活动部分都应使用AlarmManager重新安排下一个活动部分。这种方法可确保您的应用在睡眠部分时不会消耗资源。你是对的 - 一旦IntentService得到一个结果呈现给用户,它就可以使用通知。