我最近在Android电子市场上发布了一个应用程序,并且有一些我无法弄清楚的错误报告。我的应用程序具有可以“激活”的功能,只需1美元的费用,而且它基于Google的Dungeons示例应用程序。
示例应用程序存在两个主要问题,我认为这会给很多开发人员带来问题。
1)它在BillingService中使用了一种弃用的方法。 BillingService是特定于应用程序的,并处理与Android Market App的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,int)
“如果服务在其进程消失后重新启动,则该值可能为null,并且之前已返回除START_STICKY_COMPATIBILITY之外的任何内容。”
由于我是新手Android开发者,我不想哭狼。任何人都可以告诉我Dungeons示例应用程序是否已损坏,或者我是否在此处误解了某些内容?
答案 0 :(得分:2)
这些应用程序并非设计为无错误且适应各种情况,仅用于演示一个方面。我注意到其他例子中有很多怪癖。
你不能只为intent为null时添加一个测试吗?
正如您所暗示的那样,您的应用应该使用onStartCommand()而不是onStart(),这与Dungeon示例不同。