getsentry / getsentry/sentry-java
Run the Integration.register() loop off the main thread (two-phase init)
- Linguagem predominante
- Kotlin
- Estrelas
- 1.4k
- Forks
- 478
- Merge médio
- 3d 4h
- PRs com merge (30d)
- 72
Descrição
## Problem
`Sentry.init` registers all integrations synchronously on the calling thread (`sentry/src/main/java/io/sentry/Sentry.java:374-385`) — the main thread under auto-init. With ~17 default Android integrations this is the biggest remaining *block* of main-thread init work once the per-integration items (NDK etc.) are fixed.
## Proposal
Keep a minimal synchronous core — options, scopes, `SentryClient` binding, `UncaughtExceptionHandlerIntegration` — and submit the rest of the registration loop to `options.getExecutorService()`, with an opt-in marker for integrations that genuinely need the main thread (`AppLifecycleIntegration` already self-posts when off-main).
`Sentry.captureX` immediately after `init()` keeps working: the client is bound synchronously and events queue on the transport.
## Constraints
* The deliberate startup-crash blocking flush (`sentry-android-core/.../SendCachedEnvelopeIntegration.java:151-161`) must still block `init()` — needs an explicit carve-out.
* Integration ordering guarantees (NDK before outbox watcher, AppLifecycle before ANR, ANR before Replay — see comments in `AndroidOptionsInitializer.installDefaultIntegrations`) must be preserved. The single-threaded executor keeps submission order, but mixed sync/async registration could break it; audit each.
* Session auto-start + `isForegroundImportance()` at the end of `SentryAndroid.init` (`SentryAndroid.java:184-203`) depend on integration state (LifecycleWatcher) — decide whether they move too.
Concrete follow-up to getsentry/sentry-java#5475 ("Move more init code async").
Guia de contribuição
Direção de pesquisa
Comece pelo loop de registro em sentry/src/main/java/io/sentry/Sentry.java:374-385 e pelos comentários sobre a ordenação em AndroidOptionsInitializer.installDefaultIntegrations. Em seguida, inspecione SendCachedEnvelopeIntegration.java:151-161 e SentryAndroid.java:184-203. Considera-se concluído quando as fases síncrona e baseada em executor forem definidas, preservando o flush de crashes na inicialização, a ordenação das integrações e o comportamento do estado da sessão ou do primeiro plano.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- android, java
- Domínio
- mobile-dev, performance
- Tipo de issue
- Refatoração
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Status de atividade
- Pouca atividade
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 35/100