gpt4 book ai didi

android - 整个应用程序中的一个 BillingClient 实例

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:43 31 4
gpt4 key购买 nike

我有一个有很多 Activity 的应用程序。其中一项 Activity 是显示购买选项。

在计费库 (https://github.com/googlesamples/android-play-billing) 的示例应用程序中,使用了 BillingClientLifecycle 和 BillingManager,它们都关联到一个 Activity ,因此在创建/销毁 Activity 时打开/关闭连接。

但是在一个有很多 Activity 的应用程序中,针对不同的 Activity 分别执行此操作似乎并不理想。我还想在应用启动时检查订阅是否有效。

我正在考虑在应用程序的应用程序子类中创建 BillingClient。但是,如果我这样做,我只会打开 BillingClient 连接而不是关闭它(因为那里没有 onDestroy 方法)。有没有人这样做过并遇到任何问题?这是否也违反了最佳实践,是否会导致网络/性能出现任何问题?

最佳答案

我通读了 billing-1.2.2-sources.jarBillingClientImpl.java 的源代码,我相信使用 BillingClient< 是安全的 作为应用程序单例,即使这意味着永远不会调用 BillingClient.endConnection()

BillingClientImpl.java 不需要/在其构造函数中使用 Activity;它使用 Context,它所做的只是调用 context.getApplicationContext() 来存储应用上下文。 launchBillingFlow 方法确实有一个 Activity 参数,但是没有存储 Activity ;它的唯一目的是使用计费 Intent 调用 activity.startActivity(intent)

BillingClient.startConnection调用context.registerReceiver将自己的BillingBroadcastReceiver注册为BroadcastReceiver,然后调用context.bindService 绑定(bind)一个服务连接。 (同样,这两个调用都是针对应用程序上下文 mApplicationContext 执行的,而不是针对任何特定的 Activity。)

只要在应用程序的生命周期内需要计费客户端,在 Application.onCreate() 中调用 registerReceiverbindService 是安全且可接受的 并且永远不要调用 unregisterReceiverunbindService

如果 registerReceiver 和/或 bindService 调用使用了 Activity 上下文,这将是不安全的,因为 ServiceConnection 会在 Activity 被销毁时泄漏,但当应用程序被销毁时,它的进程终止,并且它的所有服务连接都被自动清除。

关于android - 整个应用程序中的一个 BillingClient 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53111773/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com