2

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

  1. 在清单中指定服务以在单独的进程中运行,例如 android:process=":remote" 但我读过一些 StackOverflow 的帖子
    说这不是一个好主意,因为它消耗大量电池和 CPU 处理。我真的很尊重,因为这些帖子来自受信任的人。

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

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

也许还有其他方法可以做到这一点。请让我知道,如何在服务上执行长时间运行的操作。真的是势在必行。

谢谢。

4

2 回答 2

3

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

于 2013-02-07T21:13:56.137 回答
1

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

于 2013-03-21T22:13:30.243 回答