-
Notifications
You must be signed in to change notification settings - Fork 154
Description
Environment
- Android OS version: 16
- Devices affected: Samsung SM-F966U1
- Maps SDK Version: 11.17.1
Observed behavior and steps to reproduce
ANR in LifecycleMonitorAndroid.updateLifecycleState() during activity resume
The app experiences ANRs when any activity resumes, even activities that don't contain a MapView. The ANR occurs in Mapbox's internal lifecycle monitoring.
Stack trace:
io.sentry.android.core.ApplicationNotResponding: ANR
at com.mapbox.common.LifecycleMonitorAndroid.updateLifecycleState(unavailable:0)
at com.mapbox.common.LifecycleMonitorAndroid.access$updateLifecycleState(unavailable:0)
at com.mapbox.common.LifecycleMonitorAndroid$lifecycleServiceCallback$1.onLifecycleStateChanged(unavailable:7)
at com.mapbox.common.LifecycleService.updateLifecycleState(unavailable:13)
at com.mapbox.common.LifecycleService.getLifecycleState(SourceFile:12)
at com.mapbox.common.LifecycleService.registerActivityWithState(unavailable:111)
at com.mapbox.common.LifecycleService.access$registerActivityWithState(unavailable:0)
at com.mapbox.common.LifecycleService$callback$1.onActivityResumed(unavailable:10)
at android.app.Application.dispatchActivityResumed(Application.java:450)
at android.app.Activity.dispatchActivityResumed(Activity.java:1686)
at android.app.Activity.onResume(Activity.java:2287)
at androidx.fragment.app.FragmentActivity.onResume(unavailable:5)
at com.example.app.onboarding.OnboardingActivity.onResume(unavailable:0)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1720)
at android.app.Activity.performResume(Activity.java:9691)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:6162)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:6265)
...
Steps to reproduce:
- Initialize Mapbox SDK in
Application.onCreate()by settingMapboxOptions.accessToken - Launch any activity (doesn't need to contain a MapView)
- Observe ANR during
onResume()in Mapbox's lifecycle callback
Expected behavior
LifecycleMonitorAndroid.updateLifecycleState() should not block the main thread and cause ANRs. Lifecycle state updates should be fast and non-blocking, or performed asynchronously.
Notes / preliminary analysis
- It rarely happens
- The ANR occurs in activities that have no MapView or map-related functionality
- Once
MapboxOptions.accessTokenis set, Mapbox registersActivityLifecycleCallbacksthat run on every activity lifecycle event - The
updateLifecycleState()method appears to perform blocking operations - There is no API available to disable or configure this automatic lifecycle monitoring
- This affects user experience even when maps are not being displayed
Additional links and references
- Related to lifecycle monitoring introduced in Mapbox Maps SDK v11
- Using
com.mapbox.maps:android-ndk27:11.17.1