Android 上是不是总是有一个计费服务实例?

Posted

技术标签:

【中文标题】Android 上是不是总是有一个计费服务实例?【英文标题】:Is there always one instance of Billing Service on Android?Android 上是否总是有一个计费服务实例? 【发布时间】:2012-08-22 16:10:57 【问题描述】:

在 Google 的 In App Billing 示例(Dungeons)中,在主 Activity onCreate 中创建了一个 Service 实例:

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mHandler = new Handler();
    mDungeonsPurchaseObserver = new DungeonsPurchaseObserver(mHandler);
    mBillingService = new BillingService();
    mBillingService.setContext(this);
    ....
 

在接收器中,服务由 context.startService 启动。

private void notify(Context context, String notifyId) 
    Intent intent = new Intent(Consts.ACTION_GET_PURCHASE_INFORMATION);
    intent.setClass(context, BillingService.class);
    intent.putExtra(Consts.NOTIFICATION_ID, notifyId);
    context.startService(intent);

会以某种方式通知使用 onCreate 中创建的某个实例,还是会创建另一个作为实际服务运行的此类实例?

【问题讨论】:

【参考方案1】:

“总是一个实例”是什么意思?那很重要吗? 据我所知,当接收者收到它时,它会启动服务并检查用户是否实际购买了它(即获取购买信息)。服务完成后,它会向您发送一条广播消息,以便您采取相应措施。我不认为它总是在后台运行。

【讨论】:

据我了解,服务已启动,将一直运行直到终止。在 Dungones 示例中,它已完成: public void unbind() try unbindService(this); catch (IllegalArgumentException e) 但这只在 onCreate 方法中创建的实例上调用,所以如果有两个实例第二个会泄漏? 为什么要了解库的内部功能。你可以简单地使用它。我正在使用这个库:robotmedia.net/2011/06/… 它比 Google 提供的更简单。 但是,我认为该服务会进行网络连接并更新内容并在完成时终止。如果它启动两次,它将运行两次并通知您的应用两次。我认为这不是一个大问题。不可能有泄漏。

以上是关于Android 上是不是总是有一个计费服务实例?的主要内容,如果未能解决你的问题,请参考以下文章

自建云服务计费系统

我们如何在服务器端验证 Android 应用内计费收据?

如何按实例名称获取 GCP 计费? (不是按类型)资源和计费 sku id 之间是不是存在关联?

在 android 上使用 Socket.IO 总是返回 XHR 轮询错误

Android 应用内计费版本 3 获得过期订阅

支付api如何自动计费?