0

我有一个混合案例 IDL 服务,我以两种方式使用它:

  1. 该服务将生成一个线程并进行网络调用以代表 Activity 获取一些 XML 内容。内容通过定义回调方法的客户端IDL返回给Activity
  2. 如果用户选择通知选项,则服务会创建一个重复执行的计时器并创建一个工具栏通知。它还缓存了内容,因此当 Activity 请求更新时,它是从缓存中提供的,而不是另一个网络调用

所以我的问题是

  1. 对于场景 #1,我为使用网络调用服务而不是直接在 Activity 中创建后台线程付出的代价是多少(如果有的话)?
  2. 对于#2 - 我最好将实现更改为 AlarmManager 吗?我注意到,当我使用 TasKiller 杀死进程时,我的服务会死掉并且永远不会重新启动,AlarmManager-base 作业是否有更好的恢复机会?
4

1 回答 1

1

对于场景 #1,我为使用网络调用服务而不是直接在 Activity 中创建后台线程付出的代价是多少(如果有的话)?

我假设,既然你说这是一个“IDL 服务”,这就是我所说的远程服务——你正在使用 AIDL 来定义一个跨进程边界使用的接口。

在这种情况下,第二个进程的成本是几 MB 的 RAM,加上 IPC 开销的一些 CPU 时间。多少“CPU 时间”取决于它被调用的频率。

对于#2 - 我最好将实现更改为 AlarmManager 吗?

一般来说,是的。理想情况下,服务尽可能少地存储在内存中。

我注意到,当我使用 TasKiller 杀死进程时,我的服务会死掉并且永远不会重新启动,AlarmManager-base 作业是否有更好的恢复机会?

不,因为“任务杀手”应用程序倾向于滥用 API(用 Dianne Hackborn 的话),这会杀死一切,包括预定的警报。目前,据我所知,没有可靠有效的防御“任务杀手”的方法。

于 2009-10-27T13:50:13.077 回答