【问题标题】:Using Activity lifecycle methods, what's the best strategy for binding and unbinding to a local service?使用 Activity 生命周期方法,绑定和取消绑定到本地服务的最佳策略是什么?
【发布时间】:2018-04-02 18:42:36
【问题描述】:

我从多个活动绑定到本地 Service(即不使用 IPC 和 AIDL)。我想确保我没有从用户未使用的活动中保存对此服务的引用。

我的选择是:1.) 在onCreate() 中绑定服务并在onDestroy() 中取消绑定。 2.) 在onStart() 中绑定并在onStop() 中取消绑定。 3.) 在onResume() 中绑定并在“onPause()”中取消绑定。或者这些的某种组合。

绑定和取消绑定到本地服务的最佳实践方法是什么?我不需要担心停止活动后保持本地连接吗?

此外,一旦绑定到此特定服务,我将检索一个Cursor,它通过CursorAdapter 附加到我的ListActivity。当 Activity 不在视野范围内时,光标检索的数据可能已更改,因此我想在 Activity 再次显示时重新查询它。如果我在onCreate() 中绑定,我可以在onRestart() 中重新查询。如果我每次都在onResume() 中绑定,数据将是新鲜的,因为我会在服务的连接回调中查询它。

想法、cmets、批评或建议?

【问题讨论】:

    标签: android


    【解决方案1】:

    这取决于服务是通过绑定还是通过调用 startService() 启动的。如果 startService(),则绑定/取消绑定的位置/时间几乎没有区别。

    如果它是通过绑定开始的,我们无法在不了解具体情况的情况下回答该问题。

    看起来您的服务将始终在运行(即由 startService() 启动),因此您绑定/取消绑定的位置似乎无关紧要。只需选择最合乎逻辑的位置即可。

    【讨论】:

    • 谢谢!该服务是双重服务,因此它由活动启动和绑定。为了更好地理解我的问题,您还需要哪些其他细节?
    • 两者都在不同的时间吗?或者你是用 startService 启动它,然后绑定到它?如果是后者,那么绑定到它不会有太大影响,你可以把它放在最合乎逻辑的地方。
    • 服务可以先启动后绑定,也可以在未启动时绑定。
    • 嗯,这些是 2 个完全不同的 licecycles,具有截然不同的用例。您可能应该使用一种方法或其他方法。您应该阅读服务生命周期developer.android.com/reference/android/app/…
    • 不完全正确,是的,它们是不同的生命周期,但它们的用例并不完全不同。例如,在服务中托管一个长时间运行的进程(并通过 startService() 启动服务),然后从活动绑定到它以找出进程的状态。我相信音乐应用可以做到这一点。
    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多