【问题标题】:Serious problem in the Android in-app billing example?Android 应用内计费示例中的严重问题?
【发布时间】:2011-08-30 17:11:25
【问题描述】:

我最近在 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,因为代码

字符串动作 = intent.getAction();

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

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

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

由于我是一名新手 Android 开发人员,我不想大喊大叫。谁能告诉我地下城示例应用程序是否损坏,或者我在这里误解了什么?

【问题讨论】:

标签: android in-app-purchase android-service


【解决方案1】:

这些应用的设计初衷不是为了避免错误并能适应各种情况,而只是为了展示一个方面。我注意到其他示例中有很多怪癖。

你不能在意图为空时添加一个测试吗?

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

【讨论】:

  • 谢谢。我想我肯定很高兴 google 选择了这样一个“不现实”的示例(药水和剑),并且他们提供的示例应用程序包含 2.0 之前的代码。
  • 最好使用pre 2.0 代码来启用向后兼容的代码。仍有约 10% 的用户在使用
  • 我仍然认为 Google 有责任提供一个无错误且对大多数情况具有弹性的示例。至少,这符合他们的利益。但是,我猜他们很着急。感谢他们在前几天增加了 99 个新国家 :-)
猜你喜欢
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
相关资源
最近更新 更多