zmb*_*mbq 5 service multithreading android
我有一个Android应用程序,其中的活动会激活在后台运行的长时间运行的操作.完成后,这些操作与活动交互.我正在开发一个处理Activity/Long-Running-Task耦合的组件,负责处理被破坏和重新创建的活动.
现在该组件被实现为Android服务.这些活动调用bindService并使用生成的IBinder来启动和跟踪任务.我决定不使用startService,因为我更喜欢通过Java接口提供更丰富的API.
现在问题.活动A启动,绑定到服务并调用serviceApi.runTask(...).然后销毁活动A(例如,因为用户翻转电话)并重新创建为活动A'.然后'再次绑定到服务,宣布它的存在,一切都应该运行良好.
除了我的服务被破坏.当活动A被销毁时,它将从服务中解除绑定.Android看到没有更多的客户端,并杀死了服务.创建活动A'时,将再次创建服务,并且我将丢失旧服务所具有的所有内容.
我能看到的唯一解决方案是使用单例进行服务.然后它并不一定是Android服务,只是每个人都可以访问的实例.这在Android中不受欢迎吗?是否有更好的设计适合这个问题?
编辑:即使我调用startService然后绑定它,只要应用程序正在运行,就不能保证服务实例会存在.如果资源不足,Android可以杀死粘性服务.杀死服务会导致应用程序出现故障,我无法做到这一点.
即使我调用startService然后绑定它,只要应用程序正在运行,就不能保证服务实例会存在.
正确.
如果资源不足,Android可以杀死粘性服务.
也正确.所有"粘性"意味着Android可能会重启服务.
杀死服务会导致应用程序出现故障,我无法做到这一点.
创建一个保证永远运行的服务是不可能的.对于初学者来说,用户可以随时摆脱您的服务,因为用户厌恶那些拥有永无止境的无意义服务的开发人员.只有极少数情况下才需要编写永久性服务; 否则,这只是草率的编程.
我能看到的唯一解决方案是使用单例进行服务.然后它并不一定是Android服务,只是每个人都可以访问的实例.这在Android中不受欢迎吗?
当进程终止时,单身人士(也就是静态数据成员)将会消失.该过程最终将终止,特别是如果没有活动服务且您的任何活动都不在前台.
| 归档时间: |
|
| 查看次数: |
5378 次 |
| 最近记录: |