【问题标题】:Overhead of Services in Android (how many should I create)Android 中的服务开销(我应该创建多少)
【发布时间】:2011-12-26 08:17:12
【问题描述】:

有人知道 Android 中服务的开销有多大吗?
如果有任何其他论点可以帮助我做出以下设计决策。

我有两个 SQLite Db,一个存储实际数据(基本上只读产品库存),另一个存储设置、选定项目列表等。

现在我创建了一个服务来管理这些数据库,主要有两个原因:

  • 我希望能够“关闭时保存”(设置),这可以通过 onDestroy 实现
  • 加载数据需要一些时间,因此快速关闭应用程序会将数据保留在内存中

从设计的角度来看,我可以:

  • 创建一个服务来处理两个数据库
  • 创建两个服务,每个服务处理一个数据库

为每个数据库创建单独的服务感觉更干净,例如扩展一个通用基类来处理关机、定时器等。它还允许我独立配置它们(现在不需要)。

另一方面,我不想开始走这条路,然后,当我习惯在“服务”中做这样的事情时,发现有 3 或 5 个服务的限制。

那么,例如,开销如何? 5 个正在运行的服务,而不是一个托管 5 个不同功能的服务?有什么想法吗?

【问题讨论】:

    标签: android performance service overhead


    【解决方案1】:

    在您的情况下,Android 有效支持的服务数量应该不用担心。在一些任务管理器中查看了正在运行的服务列表后,我倾向于说在大多数设备上最多 100 个“正在运行”的服务应该没有问题。

    但是,我不确定您实际尝试做的事情是否应该在服务中实现。您能否详细说明您认为需要服务的原因?

    我希望能够“关闭时保存”(设置),这可以通过 onDestroy 实现

    您不能在正常的 Activity 生命周期回调中执行此操作吗?

    加载数据需要一些时间,因此快速关闭应用程序会将数据保留在内存中

    “快速关闭”是什么意思?您是否正在尝试为数据库数据构建某种 缓存

    【讨论】:

    • 感谢您的反馈。关于 A - 不,我不想保存每个活动开关。仅在“applicationExit”上,ApplicationClass中没有这样的东西(onTerminate仅适用于模拟器)。
    • 关于 B,它是使用服务的一个很好的副作用。即使应用程序被杀死,服务也可以将对象保留更长时间(并在例如 30 分钟不使用后自行终止) - 但别担心,我的主要动机是 A - 在退出时保存,而不是页面切换。
    • 好的,在这种情况下,在我看来,服务可能是可靠地通知应用程序死亡的唯一可行方式。 (我不明白 atm 为什么 Android 不提供相应的回调;不过也没有费心去进一步调查。)您可能希望 绑定 到服务,这样服务就会被隐式销毁一次(最后一个)绑定客户端消失了。 - 我刚刚发现this 是关于一个服务的onDestroy()... 似乎不太容易做你想做的事。
    • WTF....该死的,我以为我拥有它。为什么他们不提供一个简单的“onDestroy”回调。我不想在每次页面切换时都保存!该死的该死的......好吧,我现在可以做到(无论如何都有基础设施,但仍然)......好吧,离题了。感谢您的回答和链接!
    • 欢迎。不要让他们让你太难过:)
    【解决方案2】:

    来自 Android 开发文档...

    谨慎使用服务

    http://developer.android.com/training/articles/memory.html#Services

    【讨论】:

      【解决方案3】:

      如果服务是 RemoteServices,那么它们会在单独的进程中启动,这会增加开销并且会占用大量内存。

      尝试在这两种情况下使用单一服务。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-15
        • 1970-01-01
        • 1970-01-01
        • 2012-05-29
        • 2011-04-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多