Недавно я опубликовал приложение на Android Market и получил некоторые отчеты об ошибках, которые я не мог понять. Мое приложение имеет функциональность, которая может быть "активирована" за плату в размере 1 доллара США, и она свободно основана на примере приложения Dungeons от Google.
В примере приложения есть две основные проблемы, которые, как я думаю, вызовут проблемы для многих разработчиков.
1) В нем используется устаревший метод BillingService. BillingService является специфичным для приложения и обрабатывает связь RPC с Android Market App. Это должно быть вокруг, даже если ваша Acitivty нет. Он реализует этот метод.
@Override public void onStart (намерение намерения, int startId) {}
Вместо нового
public int onStartCommand (Intent intent, int flags, int startId) {}
2). Более серьезно, угловой случай, когда Intent us null, on onStart/onstartCommand вызывает вызовы NPE, поскольку код
Строковое действие = aim.getAction();
Выполняется в примере приложения без нулевой проверки.
Согласно документу http://developer.android.com/reference/android/app/Service.html#onStart(android.content.Intent, int)
"это может быть нулевым, если служба перезапускается после того, как ее процесс ушел, и он ранее возвращал что-либо, кроме START_STICKY_COMPATIBILITY."
Так как я начинающий Android dev, я не хочу плакать волком. Может ли кто-нибудь сказать мне, если приложение Dungeons sample сломано, или если я что-то неправильно понял?
Приложения не предназначены для того, чтобы быть свободными от ошибок и устойчивыми к ситуациям, только для демонстрации одного аспекта. Я заметил множество причуд в других примерах.
Не можете ли вы просто добавить тест, когда цель равна null?
Как вы намекали, ваше приложение должно использовать onStartCommand() вместо onStart(), в отличие от примера Dungeon.