代码之家  ›  专栏  ›  技术社区  ›  Bostone

安卓-使用后台服务

  •  0
  • Bostone  · 技术社区  · 15 年前

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

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

    所以我的问题是

    1. 对于场景1,我使用服务进行网络调用而不是直接在活动中创建后台线程的代价(如果有的话)是多少?
    2. 对于2-我是否最好将实现更改为AlarmManager?我注意到,当我使用taskiller终止进程时,我的服务会死掉,并且永远不会重新启动,alarmmanager基本作业是否有更好的恢复机会?
    1 回复  |  直到 15 年前
        1
  •  1
  •   CommonsWare    15 年前

    对于方案1,价格是多少(如果 任何)我支付使用服务的费用 网络调用而不是创建 背景线程直接位于 活动?

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

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

    为了2-我最好换衣服吗 AlarmManager的实现?

    一般来说,是的。理想情况下,服务在内存中的空间越小越好。

    我注意到当我终止进程时 有了taskiller我的服务就死了 不会重新启动,会 AlarmManager基本作业具有更好的 恢复的机会?

    不,因为“任务杀手”应用程序倾向于滥用api(用dianne hackborn的话来说),这个api会杀死所有东西,包括预定的警报。目前,我所知道的针对“任务杀手”的可靠和有效的防御措施还没有。