android - Android 应用内结算示例中的严重问题?

标签 android in-app-purchase android-service

我最近在 Android Market 上发布了一个应用程序,但收到了一些我无法弄清楚的错误报告。我的应用程序具有只需 1 美元费用即可“激活”的功能,它大致基于 Google 的 Dungeons 示例应用程序。

示例应用有两个主要问题,我认为这会给很多开发者带来麻烦。

1) 它在 BillingService 中使用了一个已弃用的方法。 BillingService 是特定于应用程序的,它处理与 Android Market 应用程序的 RPC 通信。即使您的 Acitivty 不存在,它也需要存在。它实现了这个方法。

@覆盖 public void onStart(Intent intent, int startId) {}

而不是更新的

public int onStartCommand(Intent intent, int flags, int startId){}

2) 更严重的是,在调用 onStart/onstartCommand 时 Intent us null 的极端情况会导致 NPE,因为代码

String action = intent.getAction();

在示例应用程序中执行,没有任何空检查。

根据文档 http://developer.android.com/reference/android/app/Service.html#onStart(android.content.Intent , 整数)

“如果服务在其进程消失后重新启动,并且它之前返回了除 START_STICKY_COMPATIBILITY 之外的任何内容,则这可能为 null。”

由于我是 Android 开发新手,所以我不想狼来了。谁能告诉我 Dungeons 示例应用程序是否已损坏,或者我是否误解了这里的内容?

最佳答案

这些应用程序并非设计为无错误和适应各种情况,只是为了展示一个方面。我注意到其他示例中有很多怪癖。

当 Intent 为空时,您不能只添加一个测试吗?

正如您所暗示的,您的应用应该使用 onStartCommand() 而不是 onStart(),这与 Dungeon 示例不同。

关于android - Android 应用内结算示例中的严重问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6090172/

相关文章:

java - map 正在加载,但在 Android 开发中看不到 map

swift - tvOS - 应用内购买在产品请求中返回 0 个产品 - 产品仍在审核中

iphone - 如何在 iOS 中获取应用内购买的区域设置货币价格?

java - Android 服务在一段时间后停止广播进度

java - 如何将文本链接设置为实际 URL 而不是 HTML 中的文本标记

android - opus-codec 在安卓上的播放

android - 哪个线程调用 `onCreateLoader()` 和 `onLoadFinished()`?

ios - 请求完成处理程序 fatal error : unexpectedly found nil while unwrapping an optional value exception

android - IntentService 连接到服务器监听

android - 如何在 Android 的服务类中实现 BroadcastReceiver?