Серьезная проблема в примере биллинга в приложении Android?

Я недавно опубликовал приложение на Android Market и получил несколько отчетов об ошибках, которые не могу понять. В моем приложении есть функции, которые можно «активировать» за плату в размере 1 доллара, и оно основано на примере приложения Dungeons от Google.

Есть две основные проблемы с примером приложения, которые, я думаю, вызовут проблемы у многих разработчиков.

1) Он использует устаревший метод в BillingService. BillingService зависит от приложения и обрабатывает связь RPC с приложением Android Market. Он должен быть рядом, даже если вашей Активности нет. Он реализует этот метод.

@Override public void onStart (намерение, int startId) {}

Вместо более новой

public int onStartCommand (намерение намерения, флаги int, int startId) {}

2) А если серьезно, крайний случай, когда Intent us null, при вызовах onStart/onstartCommand вызывает NPE, поскольку код

Строковое действие = намерение.getAction();

Выполняется в примере приложения без какой-либо проверки нуля.

Согласно документу http://developer.android.com/reference/android/app/Service.html#onStart(android.content.Intent, интервал)

«это может быть нуль, если служба перезапускается после того, как ее процесс ушел, и ранее она возвращала что-либо, кроме START_STICKY_COMPATIBILITY».

Поскольку я начинающий Android-разработчик, я не хочу плакать волком. Может ли кто-нибудь сказать мне, не работает ли пример приложения Dungeons или я что-то неправильно понял?


person Glenn Bech    schedule 22.05.2011    source источник
comment
Если вам нужна другая точка зрения, вы также можете ознакомиться с этим учебником в приложении anddev.org/advanced-tutorials-f21/ :-)   -  person Blundell    schedule 23.05.2011


Ответы (1)


Приложения не предназначены для того, чтобы быть свободными от ошибок и устойчивыми к ситуациям, а только для демонстрации одного аспекта. Я заметил много странностей в других примерах.

Разве вы не можете просто добавить тест, когда намерение равно нулю?

Как вы намекнули, ваше приложение должно использовать onStartCommand() вместо onStart(), в отличие от примера с Dungeon.

person CL22    schedule 22.05.2011
comment
Спасибо. Думаю, я просто уверен, что Google выбрал такой нереалистичный пример (зелья и мечи) и что приложение-пример, которое они предоставляют, содержит код до версии 2.0. - person Glenn Bech; 22.05.2011
comment
Лучше использовать код версии до 2.0, чтобы включить обратно совместимый код. по-прежнему около 10% пользователей используют ‹2.0 - person Blundell; 23.05.2011
comment
Я все еще думаю, что Google несет ответственность за предоставление примера без ошибок и устойчивости к большинству ситуаций. По крайней мере, это было бы в их интересах. Но, видимо, они торопились. И спасибо им за добавление 99 новых стран буквально на днях :-) - person Glenn Bech; 24.05.2011