我正在尝试确定绑定服务是否适合在我的应用程序中进行后台工作。要求是各种应用程序组件可以通过它发出不同优先级的 Web 请求。(因此服务必须维护某种队列,并且能够取消它对其他更高优先级的正在进行的请求)。我希望该服务对用户来说相对不显眼,这样他们在完成应用程序后就不会发现它正在运行 - 如果我想做一些更重要的事情,在应用程序关闭时继续,我可以使用 startForeground( ) 在此过程中推送通知。
解决方法一:从activity绑定
因此,对于给定的应用程序组件,它应该能够绑定到服务以完成工作。但是似乎有一个众所周知的问题,如果一个活动正在执行绑定,那么在配置更改(轮换)期间绑定将丢失,因为活动将被关闭。
所以,我在想我可以使用我创建的另一个上下文 ( new Context()
) 并将其绑定到服务,然后使用非 UI 片段来跨配置更改维护此上下文,直到我认为我完成了它。我只能在配置更改期间执行此操作,或者作为从活动绑定的永久替代方案。(我可能应该指出,这是跨配置更改维护实例的标准和推荐方法)
解决方案二:
我看到的主要替代方法是我可以使用应用程序上下文进行绑定——但这会持续太久吗?和/或应用程序上下文和服务之间是否存在某种循环关系,从而防止服务和应用程序上下文被破坏?
问题:
所以我试图回答自己的问题是:我应该使用第一种方法(具有临时上下文的活动)吗?还是第二个(只是将服务绑定到应用程序上下文)?
我是否认为应用程序上下文可以多次绑定到服务,然后以相同的次数解除绑定?(即每个上下文可以有多个有效的绑定)?
在第一个解决方案中使用我自己的上下文 ( new Context()
) 会导致任何问题吗?
编辑
找到更多信息:https ://groups.google.com/forum/#!topic/android-developers/Nb58dOQ8Xfw
似乎也很难任意“创建”上下文,因此解决方案 1 和 2 的组合似乎适合在跨配置更改维护服务连接但绑定到应用程序上下文的情况下。我仍然担心从应用程序上下文中解绑两次的可能性。自己计算绑定似乎没有必要 - 任何人都可以确认/否认绑定是每个连接而不是每个上下文吗?