【发布时间】:2013-02-07 20:36:10
【问题描述】:
我正在构建一个具有服务的应用程序。我知道所有应用程序组件都运行在同一个 UI 进程中,至少您在清单中指定了它。所以为了避免 ANR 的消息,我有三种方法。
在清单中指定服务以在单独的进程中运行,例如 android:process=":remote" 但我读过一些 StackOverflow 的帖子
说这不是一个好主意,因为它消耗大量电池和cpu处理。 我真的很尊重,因为这些帖子来自值得信赖的人。使用 IntentService。这可能是一个很好的出路。但我需要我的服务运行,即使 活动不可见。因为我需要该服务不断检查新的 Web 服务 来自其他用户的消息并通过通知通知。是否可以使用 一个意图服务?这是一个优雅的解决方案。
使用本地服务。只需从清单文件中删除 android:process=":remote" 属性。 但我得到一些 ...OnMainThreadException 错误。这意味着我需要创建一个特殊的 线程来执行那些长时间运行的操作或使用 AsyncTask,
也许还有其他方法可以做到这一点。请让我知道,如何在服务上执行长时间运行的操作。真的是当务之急。
谢谢。
【问题讨论】:
-
如果我错了,请纠正我,但是,AFAIK 你从服务扩展的那些类通常在另一个线程中运行。牢记这一点。我现在有 2 个进程,1 是 UI 线程,2 是服务。将其他线程(网络连接)放入我的应用程序不会导致任何问题吗?这不是系统的开销吗?
-
在 UI 上下文中执行的所有服务。因此系统没有开销将网络连接处理放到其他线程
-
@CommonsWare 你能帮帮我吗?
标签: android android-handler worker-thread