InApp购买时出错android.app.ServiceConnectionLeaked错误

时间:2018-02-17 21:32:43

标签: c# android xamarin in-app-purchase in-app-billing

我正在使用Xamarin Android开发Android应用程序。 我使用的是James Montemagno的InAppBilling插件。

当我调用PurchaseAsync Method时,将打开PlayStore对话框。但在后台我的应用程序冻结了,我没有得到任何结果。

var purchase = await CrossInAppBilling.Current.PurchaseAsync(productId, ItemType.Subscription, "apppayload");

在Sys Log中有一个android.app.ServiceConnectionLeaked错误:

02-17 22:13:05.434  LENOVO YT3-X50L Error   8031    ActivityThread  android.app.ServiceConnectionLeaked: Activity md5742c3bd4cdfedb6330d25c53207d662c.ShopActivity has leaked ServiceConnection md57a6f08dbc6561d468b2675b2ac9edab2.InAppBillingImplementation_InAppBillingServiceConnection@2277a40 that was originally bound here
at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:1092)
at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:986)
at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1303)
at android.app.ContextImpl.bindService(ContextImpl.java:1286)
at android.content.ContextWrapper.bindService(ContextWrapper.java:604)
at mono.android.view.View_OnClickListenerImplementor.n_onClick(Native Method)
at mono.android.view.View_OnClickListenerImplementor.onClick(View_OnClickListenerImplementor.java:30)
at android.view.View.performClick(View.java:5205)
at android.view.View$PerformClick.run(View.java:21164)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

我只在LENOVO YT3-X50L上出现此错误。在三星手机上它工作正常...

1 个答案:

答案 0 :(得分:2)

  

ServiceConnectionLeaked

CrossInAppBilling代码没有考虑到你的Activity可能会因为内存压力/要求而从内存中被杀死/刷新,并且没有直接做任何事情来试图阻止它,它是应用程序开发人员确定他们何时需要采取特别行动。

这是我在低端Android设备和新的Android Oreo Go(&lt; = 1MB)测试设备中看到的很多东西,但可以在任何设备上发生,但在2GB和更低的设备上大多是明显的。 / p>

  • 在调用任何外部代码之前,尽可能多地刷新/释放内存

    • 专注于发布图像通常是减少内存的最大回报(在购买完成后恢复它们)

    • 在Oreo Go 512MB设备的情况下,我不得不加倍努力完成当前活动,创建一个新的空白/空瞬态活动,然后调用外部代码(应用程序计费,相机等)完成后,恢复原始活动,并使用外部获得的新信息更新。

注意:首先分析您的应用和活动,以便集中精力。

  • 使用您自己的Keep-Alive服务

    • 使用Start / StopService而非Bind / UnBindService
    • 将其作为前台服务

注意:这不会阻止操作系统杀死/刷新您的活动/服务,它只是提供了一个不应该提示的“提示”......

注意:监控Importance中的RunningAppProcessInfo状态,以确定您的应用是否在执行外部代码之前输入ReasonServiceInUse