我有一个混合案例IDL服务,我用2种方式:

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

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

解决方案

  

对于场景#1,价格是多少(如果   任何)我付钱给使用服务   网络呼叫而不是创建   后台线程直接在   活动?

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

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

  

对于#2 - 我最好改变   实现到AlarmManager?

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

  

当我杀死进程时,我注意到了   与TasKiller我的服务死了   会永远不会重新启动   基于AlarmManager的工作更好   恢复的机会?

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top