Skip to content

Add didANRKillOnPreviousExecution() to FirebaseCrashlytics#8112

Open
jrodiz wants to merge 3 commits intomainfrom
feature/jrc--Issue4201.API.to.check.previous.ANR
Open

Add didANRKillOnPreviousExecution() to FirebaseCrashlytics#8112
jrodiz wants to merge 3 commits intomainfrom
feature/jrc--Issue4201.API.to.check.previous.ANR

Conversation

@jrodiz
Copy link
Copy Markdown
Collaborator

@jrodiz jrodiz commented May 7, 2026

Add didANRKillOnPreviousExecution() to FirebaseCrashlytics

Implements #4201.

Background

Crashlytics already detects ANRs and files reports for them, and developers have long been able to call didCrashOnPreviousExecution() to gate logic that should only run after a fatal crash. However, there was no equivalent API for ANRs: developers who want to adapt their app's behavior after an ANR (e.g., disable a heavy feature on the next cold start, log a custom key, or show a recovery dialog) had no supported way to do so.

didCrashOnPreviousExecution() works by reading a marker file written at crash time. ANRs cannot use that mechanism because the main thread is frozen and the crash handler never runs. Instead, the new method uses ApplicationExitInfo (API 30+), which records process-exit reasons at the OS level — the same source already queried internally by SessionReportingCoordinator when filing ANR reports. The new API delegates to that existing infrastructure rather than introducing a separate detection path.

Risk

  • API surface: one new public method on FirebaseCrashlytics (didANRKillOnPreviousExecution()). No existing method signatures changed.
  • Behavior on API < 30: always returns false; no ApplicationExitInfo access attempted.
  • Behavior on API 30+: reads getHistoricalProcessExitReasons once at startup on the background thread with a bounded timeout. This is the sameActivityManager call already made by the ANR-reporting path; no new system service is introduced.
  • No dependency bumps, no public API removals, no migration required.

jrodiz added 3 commits May 7, 2026 15:08
Implements firebase-android-sdk#4201 by exposing a new public API method
that detects whether the app was killed by an ANR in the previous run,
mirroring the existing didCrashOnPreviousExecution() pattern.

On Android API 30+ the method queries ApplicationExitInfo (already used
internally for ANR session reporting) against the previous session's start
timestamp. On older API levels it always returns false.
… check failures

- Add null guard on ActivityManager from getSystemService() before
  calling getHistoricalProcessExitReasons() to avoid potential NPE.
- Log exceptions in checkForPreviousAnr() at verbose level instead of
  silently ignoring them, to aid diagnosability.
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 7, 2026

📝 PRs merging into main branch

Our main branch should always be in a releasable state. If you are working on a larger change, or if you don't want this change to see the light of the day just yet, consider using a feature branch first, and only merge into the main branch when the code complete and ready to be released.

@jrodiz jrodiz requested a review from mrober May 7, 2026 21:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant