我有一个Android应用程序,其中的活动激发在后台运行的长时间运行的操作。这些操作在完成后与活动进行交互。我正在开发一个处理Activity/Long-Running-Task耦合的组件,负责处理被破坏和重新创建的活动。长时间运行Android'服务'
此时该组件是作为Android服务实现的。这些活动调用bindService并使用生成的IBinder来启动和跟踪任务。我决定不使用startService,因为我更喜欢通过Java接口实现更丰富的API。
现在的问题。活动启动时,绑定到服务并调用serviceApi.runTask(...)。然后销毁活动A(例如用户翻转手机)并重新创建为活动A'。一个'然后再次绑定到服务,宣布其存在,一切都应该运行良好。
除了我的服务被破坏。当活动A被销毁时,它解除与服务的绑定。 Android看到没有更多的客户,并杀死该服务。当活动A'被创建时,服务被再次创建,并且我失去了旧服务所具有的一切。
我能看到的唯一解决方案是使用单例服务。然后它不一定是一个Android服务,只是一个每个人都可以访问的实例。 Android在这个问题上皱起了眉头吗?有没有更适合这个问题的设计?
Editted:即使我打电话startService,然后绑定到它,没有什么保证了服务实例会只要在应用程序运行存在。如果资源不足,Android可以杀死粘性服务。杀死服务会导致应用程序发生故障,而我不能这样做。
谢谢,Commonware。组件(缺少更好的单词)我只需要在应用程序启动并运行时运行,并且用户正在使用它。一旦用户关闭应用程序,该组件也可以关闭,因为其唯一目的是协调过程中异步UI相关的任务。 我确实需要定期检查服务器更新的服务(我还没有决定使用C2DM)。我将把它作为一个短期的服务来实现,在投票后关闭。 – zmbq