Embrace’s iOS and Android SDKs are now built on OpenTelemetry!

Read the release

Using call stack snapshots to capture additional context about ANRs in production

ANRs can be a major headache for developers, but call stack snapshots offer a solution. By capturing additional context about ANRs in production, developers can gain insights that help diagnose and solve performance issues.

As mobile app developers, we are all too familiar with dreaded ANR (Application Not Responding) errors in Android app development. ANRs occur when an app’s main thread becomes unresponsive, causing the app to freeze or crash, leading to frustrated users and potential loss of revenue. Therefore, identifying and fixing ANRs is crucial for delivering a smooth and reliable user experience.

However, reproducing ANRs locally for analysis and debugging can be challenging, if not impossible. ANRs can occur sporadically and may not manifest in a controlled environment, making it difficult to pinpoint the root cause of the issue. This can result in wasted time, resources, and delays in resolving the problem.

But what if there was a way to capture the call stack snapshots before an ANR happens, and to customize your ANR thresholds? 

Enter Embrace: a platform capable of leveraging call stack snapshot data when capturing ANRs in production, giving developers a new level of context into these critical errors. 

In this blog post, we will explore how developers can use this approach to effectively analyze ANRs in their Android apps with the help of Embrace, the technical benefits of this strategy, and what this looks like in practice.

Embrace’s differentiation from traditional monitoring approaches  

When it comes to capturing ANRs in production, Embrace stands out with its unique approach and comprehensive capabilities. Unlike tools that rely on sampled data or require manual reproduction of ANRs, Embrace captures every ANR that is triggered in real-time along with important contextual information other platforms miss, providing developers with accurate and reliable insights into app performance issues.

Capture stack snapshots before ANR occurs

One key differentiator of Embrace is its unique approach to capturing call stack snapshots before an ANR occurs, allowing developers to see what was executing on the main thread before an ANR was triggered. We use lightweight sampling to obtain this data, which does not impact app performance or user experience. Embrace’s SDK is designed to run efficiently in the background without adding noticeable overhead to the app. This ensures that developers can capture ANRs in production without introducing additional latency or impacting the app’s performance, making it a seamless and non-intrusive solution.

Capture every ANR in production

Moreover, Embrace has the ability to capture every ANR that happens in production — unlike alternative platforms that rely on sampling data and often miss critical incidents that may not happen in large volumes. Instead, Embrace captures every ANR occurrence in production, providing a comprehensive view of app performance for every user. This means that developers get an accurate representation of all the different types of ANRs that occur in their app.

Comprehensive and accurate ANR detection

Additionally, Embrace provides comprehensive and accurate ANR detection capabilities. This is done by analyzing the captured data to automatically detect and categorize ANRs, providing developers with detailed insights into the root causes of the issues. Embrace goes beyond just identifying the symptoms of ANRs, but also provides actionable insights into the underlying causes, such as slow API calls, unoptimized database queries, or resource contention, enabling developers to quickly pinpoint and fix the root causes of ANRs.

Granular visibility into ANR occurrences

With Embrace, developers can also get granular visibility into the ANR occurrences, including the frequency, customizable durations, and affected users, through its intuitive dashboard. Embrace’s dashboard provides detailed ANR reports, including timeline views, trend analysis, and user-specific ANR details, giving developers a holistic view of ANRs on their app. This allows developers to prioritize and address the most critical ANRs based on their impact on users and business goals.

With Embrace, developers can confidently capture ANRs in production and quickly resolve performance issues to deliver a seamless and reliable app experience for their users.

Technical benefits of using Embrace for capturing ANR data

Embrace offers a range of technical advantages that make it a powerful tool for capturing ANRs in production. With its comprehensive data collection and analysis capabilities, Embrace provides developers with detailed insights into ANR occurrences, allowing for thorough analysis and effective troubleshooting.

One of the key technical benefits of using Embrace is its ability to offer detailed ANR analysis. Embrace captures the ANR occurrences and rich contextual information, such as call stack snapshots leading up to the ANR and thread states. This wealth of information helps developers to accurately pinpoint the root cause of ANRs and understand the exact line of code that triggered an ANR. This level of detail is invaluable in identifying and resolving complex performance issues that may impact app responsiveness and user experience.

Embrace also goes beyond just capturing ANRs in production and offers information that enhances the ability of developers to reproduce ANRs in their development environment. This means developers can recreate the ANR scenario in their development environment by using Embrace’s advanced tools and features to perform thorough analysis and debugging. This allows developers to closely inspect the state of the app, thread behavior, and system interactions leading up to the ANR, enabling them to gain a deeper understanding of the issue and effectively address it. Combine that with the call stack snapshot, which details what the main thread is doing leading up to the ANR, and you can get as close to replaying a user’s experience without literally going back in time and looking over their shoulder.

Furthermore, Embrace’s unsampled data capture approach ensures developers capture every ANR occurrence without relying on sampling or random chance. This provides a more accurate and reliable representation of the ANR rates and events in the app, allowing developers to make data-driven decisions when prioritizing and addressing ANRs. By having a complete picture of ANR occurrences, developers can focus their efforts on the most critical issues impacting users, leading to faster resolution and improved app performance.

These capabilities empower developers to troubleshoot and resolve ANRs, improving app performance and user experience.

How to implement ANR data capture with Embrace

Implementing ANR data capture with Embrace is straightforward and can be done in just a few steps. Here’s a step-by-step guide on how developers can set up Embrace to capture ANRs in production:

Step 1: Sign up and integrate Embrace SDK

First, get started by creating a free account with Embrace, integrate the Embrace SDK into your Android app, and verify your integration. Embrace provides easy-to-follow documentation and guides for SDK integration, making the process seamless and hassle-free.

Step 2: Set up ANR thresholds

Once the Embrace SDK is integrated, navigate to the Embrace dashboard and access the ANR settings. Here, you can customize ANR thresholds based on your app’s requirements. For example, you can adjust the duration for triggering ANR alerts, view ANR data over custom times, and view ANRs across your different app versions.

Embrace's ANR summary page where you can set ANR thresholds and view ANR graph percentages.

Step 3: Customize the ANR data you want to see

In the Embrace dashboard, analyze the ANR, either by the “first” sample, “most representative” sample, or an “ad-focused” sample, to troubleshoot when ANRs are caused by ad SDKs. This comprehensively and accurately represents ANR rates and events based on your team’s needs. 

Embrace's ANR dashboard that shows how you can customize the ANR data you want to see by different sample types.

Step 4: Set up real-time alerts and notifications

Embrace allows you to set up customizable, real-time alerts and notifications for ANRs. You can customize your alert types, break them out by different metrics, and define trigger thresholds. In addition, you can configure alerts to be sent via email, Slack, or other communication channels, ensuring you are immediately notified when ANRs occur in your app. This allows you to identify and address ANRs in production, minimizing their impact on user experience.

Step 5: Monitor and analyze ANR occurrences

Embrace’s comprehensive dashboard allows you to monitor and analyze ANR occurrences in real time. The dashboard provides detailed information, including stack traces and thread states, allowing you to gain deep insights into ANR occurrences and their root causes. Embrace’s intuitive UI also provides visualizations and charts to help you identify patterns and trends in ANR occurrences, making it easier to prioritize and address critical issues.
Embrace's troubleshooting page that shows percentages of your ANRs by stack trace, session, and package.
Using Embrace for ANR data capture

Embrace has been proven to be a valuable tool for developers in capturing ANRs in production and resolving them efficiently. Below is a real-life example of how developers have successfully used Embrace to capture ANRs and improve their app performance:

Wildlife Studios

Wildlife Studios, one of the largest mobile gaming companies in the world, was facing ANR-related performance issues that were impacting the user experience and developer productivity. 

With Embrace’s ANR monitoring and its unsampled data capture approach, the development team was able to investigate several different hypotheses and decide on the best course of action to bring the ANR rate down. After examining every lead Embrace provided, they found the best way to reduce their ANR rate was to disable ads for a subset of devices and stop supporting the game for very low-end devices. This allowed them to minimize the revenue impact while boosting their Play Store visibility. 

As a result, Wildlife Studios saw a significant reduction in ANR rates, resulting in improved user retention and engagement. 

In conclusion, Embrace’s unsampled data capture approach provides significant technical benefits for capturing ANRs in production and optimizing app performance. With detailed ANR analysis, including stack traces, thread states, and system traces, developers can quickly identify and resolve the root causes of ANRs. In addition, Embrace’s real-time alerts, notifications, and advanced debugging features enable proactive monitoring and debugging of ANRs, resulting in improved user experience and higher user satisfaction.

Don’t let ANRs impact your app’s performance. Experience the benefits of Embrace’s unsampled data capture by starting for free today

Embrace Deliver incredible mobile experiences with Embrace.

Get started today with 1 million free user sessions.

Get started free

Build better mobile apps with Embrace

Find out how Embrace helps engineers identify, prioritize, and resolve app issues with ease.