我有一个 Android 应用程序,其中“活动”会触发在后台运行的长时间运行的操作。这些操作完成后与活动交互。我正在开发一个处理活动/长时间运行任务耦合的组件,负责销毁和重新创建活动。
现在该组件已作为 Android 服务实现。活动调用bindService并使用生成的IBinder来启动和跟踪任务。我决定不使用 startService,因为我更喜欢通过 Java 接口获得更丰富的 API。
现在问题来了。 Activity A 启动,绑定到服务并调用 serviceApi.runTask(...)。然后,活动 A 被销毁(例如,因为用户翻转手机)并重新创建为活动 A'。然后,A' 再次绑定到服务,宣布其存在,一切都应该运行良好。
除了我的服务被破坏。当 Activity A 被销毁时,它会解除与服务的绑定。 Android 发现不再有客户端,并终止该服务。创建活动 A' 时,会再次创建该服务,并且我会丢失旧服务拥有的所有内容。
我能看到的唯一解决方案是使用单例服务。然后它并不一定是一个 Android 服务,只是一个每个人都可以访问的实例。在 Android 中这会让人皱眉吗?有没有更好的设计来解决这个问题呢?
编辑:即使我调用 startService 然后绑定到它,也不能保证只要应用程序正在运行,服务实例就会存在。如果资源不足,Android 可能会终止粘性服务。终止该服务将导致应用程序出现故障,而我不能这样做。
即使我调用 startService 然后绑定到它,也无法保证只要应用程序正在运行,服务实例就会存在。
Correct.
如果资源不足,Android 可能会终止粘性服务。
也正确。所有“粘性”意味着 Android 可能会重新启动服务。
终止该服务将导致应用程序出现故障,而我不能这样做。
创建保证永远运行的服务是不可能的。对于初学者来说,用户可以随时摆脱你的服务,因为用户讨厌那些永远运行毫无意义的服务的开发人员。仅在极少数情况下才需要编写永久服务;否则,这只是草率的编程。
我能看到的唯一解决方案是使用单例服务。然后它并不一定是一个 Android 服务,只是一个每个人都可以访问的实例。在 Android 中这会让人皱眉吗?
当进程终止时,单例(也称为静态数据成员)将消失。该进程最终将终止,特别是如果没有活动服务并且您的任何活动都不在前台的话。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)