Android Crittercism init в приложении и активности

Безопасно (или рекомендуется) позвонить Crittercism.init(getApplicationContext(), id); как в onCreate реализации приложения, так и в ОСНОВНОЙ активности?

В официальных инструкциях по настройке Crittercism сказано, чтобы он вызывался в ОСНОВНОМ действии, а приложение вообще не упоминалось.

Похоже, что это побочный эффект - игнорирование любых сбоев, происходящих в методе onCreate реализации приложения (фактически одиночного). Об исключениях сообщается только в том случае, если init вызывается в onCreate реализации приложения.

Так нормально ли вызывать init в обоих, или это должно быть просто приложение или просто Activity?

2 ответа

Решение

Инициализировать библиотеку Crittercism в обоих местах безопасно, но в этом нет необходимости. Это потому, что после первой инициализации любые последующие инициализации будут обнаружены и проигнорированы.

Это оставляет вас с возможностью инициализации в любом месте. Хотя большинство людей предпочитают делать это на уровне активности, запуск Crittercism в классе Application работает.

Независимо от того, где вы инициализируете библиотеку, о всех ваших действиях следует сообщать о сбоях и другой информации.

Кроме того, если вы запускаете Crittercism на уровне активности, любые сбои в независимо работающих контент-провайдерах либо не сообщаются, либо, если вы используете Crittercism там, например, чтобы оставить хлебные крошки, происходит сбой контент-провайдера со следующим исключением:

Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:121)
at crittercism.android.f$5.<init>(Unknown Source)
at crittercism.android.f.<init>(Unknown Source)
at com.crittercism.app.Crittercism.<clinit>(Unknown Source)

Поэтому я бы всегда инициализировал Crittercism в классе Application.onCreate, чтобы избежать этого.

Другие вопросы по тегам