【发布时间】:2011-11-13 18:31:12
【问题描述】:
我有一个 Android 应用程序,在该应用程序中,Activity 会触发在后台运行的长时间运行的操作。这些操作在完成后与活动交互。我正在开发一个处理 Activity/Long-Running-Task 耦合的组件,负责处理被销毁和重新创建的活动。
现在该组件被实现为 Android 服务。活动调用 bindService 并使用生成的 IBinder 来启动和跟踪任务。我决定不使用 startService,因为我更喜欢通过 Java 接口实现的更丰富的 API。
现在的问题。 Activity A 启动,绑定到服务并调用 serviceApi.runTask(...)。 Activity A 然后被销毁(例如,因为用户翻转手机)并重新创建为 Activity A'。 A' 然后再次绑定到服务,宣布它的存在并且一切都应该运行良好。
除非我的服务被破坏。当 Activity A 被销毁时,它与服务解除绑定。 Android 看到没有更多的客户端,并终止了该服务。创建 Activity A' 时,会再次创建服务,而我失去了旧服务的所有内容。
我能看到的唯一解决方案是对服务使用单例。然后它不一定是 Android 服务,只是每个人都可以访问的实例。这在Android中是不受欢迎的吗?有没有更好的设计来解决这个问题?
已编辑:即使我调用 startService 然后绑定到它,也不能保证只要应用程序正在运行,服务实例就会存在。如果资源不足,Android 可以终止粘性服务。杀死服务会导致应用程序发生故障,我不能这样做。
【问题讨论】:
标签: android multithreading service