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, чтобы избежать этого.