我正在构建一个拥有服务的应用程序。我知道所有应用程序组件都在同一个UI进程中运行,至少你在清单中指定它。所以为了避免ANR的消息,我有三种方法。
指定清单中的服务,以便在单独的流程中运行 android:process =“:remote”但我已经阅读了一些StackOverflow的帖子 说它不是一个好主意,因为它消耗了大量的电池和CPU处理。 我真的很尊重,因为那些帖子来自可信赖的人。
使用IntentService。这可能是一个很好的出路。但我需要我的服务运行即使 活动不可见。因为我需要服务不断检查新服务的Web服务 来自其他用户的消息并通知通知。是否可以使用 一个IntentService?这是一个优雅的解决方案。
使用本地服务。只是从清单文件中删除android:process =“:remote”属性。 但我得到一些...... OnMainThreadException错误。这意味着我需要创建一个特殊的 线程执行那些长时间运行的操作或使用AsyncTask,
也许有其他方法可以做到这一点。请告诉我,如何对服务执行长期运行操作。真是当务之急。
感谢。
答案 0 :(得分:3)
在UI线程中执行的Android服务。因此,您应该使用AsyncTask或其他方式来处理网络请求的线程。
答案 1 :(得分:1)
首先,我们接受有2个部分:活动部分(网络)和下一个活动部分之前的一些睡眠部分。我认为您可以使用普通的本地IntentService
作为活动部件。完成后的每个活动部分都应使用AlarmManager
重新安排下一个活动部分。这种方法可确保您的应用在睡眠部分时不会消耗资源。你是对的 - 一旦IntentService
得到一个结果呈现给用户,它就可以使用通知。