Firebase-android-sdk: ANR

Created on 29 Sep 2020  路  4Comments  路  Source: firebase/firebase-android-sdk

[READ] Step 1: Are you in the right place?

Issues filed here should be about bugs in __the code in this repository__.
If you have a general question, need help debugging, or fall into some
other category use one of these other channels:

  • For general technical questions, post a question on StackOverflow
    with the firebase tag.
  • For general Firebase discussion, use the firebase-talk
    google group.
  • For help troubleshooting your application that does not fall under one
    of the above categories, reach out to the personalized
    Firebase support channel.

[REQUIRED] Step 2: Describe your environment

  • Android Studio version: 4.0
  • Firebase Component: Messaging (Database, Firestore, Storage, Functions, etc)
  • Component version: 20.2.4

[REQUIRED] Step 3: Describe the problem

Appear tons of ANR errors in Play Console related to firebase messaging. And a lot of users have the same problem and are reporting in a closed issue of 2 years ago (2018).

Issue closed that continues active with more than 50 comments and 33 participants https://github.com/firebase/quickstart-android/issues/594

image

Steps to reproduce:

I can't reproduce, I just see the issues in the play console.

Relevant Code:

Broadcast of Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x11000010 pkg=xxx cmp=xxx/com.google.firebase.iid.FirebaseInstanceIdReceiver (has extras) }, InvisibleToUser

com.google.firebase.iid.FirebaseInstanceIdReceiver


"main" prio=5 tid=1 Runnable
  | group="main" sCount=0 dsCount=0 flags=4 obj=0x713d3fc8 self=0x788ebc1c00
  | sysTid=22434 nice=0 cgrp=default sched=0/0 handle=0x7890126ed0
  | state=R schedstat=( 310821836 210351148 893 ) utm=8 stm=22 core=0 HZ=100
  | stack=0x7fe8780000-0x7fe8782000 stackSize=8192KB
  | held mutexes= "mutator lock"(shared held)
  at com.google.firebase.internal.DataCollectionConfigStorage.directBootSafe (DataCollectionConfigStorage.java)
  at com.google.firebase.internal.DataCollectionConfigStorage.isEnabled (DataCollectionConfigStorage.java)
  at com.google.firebase.internal.DataCollectionConfigStorage.setEnabled (DataCollectionConfigStorage.java)
  at com.google.firebase.FirebaseApp.isDataCollectionDefaultEnabled (FirebaseApp.java)
  at java.lang.reflect.Method.invoke (Method.java)
  at io.fabric.sdk.android.services.common.FirebaseAppImpl.getInstance (FirebaseAppImpl.java)
  at io.fabric.sdk.android.services.common.FirebaseAppImpl.isDataCollectionDefaultEnabled (FirebaseAppImpl.java)
  at io.fabric.sdk.android.services.common.DataCollectionArbiter.getInstance (DataCollectionArbiter.java)
  at io.fabric.sdk.android.services.common.DataCollectionArbiter.isDataCollectionEnabled (DataCollectionArbiter.java)
  at com.crashlytics.android.core.CrashlyticsCore.access$100 (CrashlyticsCore.java)
  at com.crashlytics.android.core.CrashlyticsCore.doLog (CrashlyticsCore.java)
  at com.crashlytics.android.core.CrashlyticsCore.isBuildIdValid (CrashlyticsCore.java)
  at com.crashlytics.android.core.CrashlyticsCore.log (CrashlyticsCore.java)
  at com.crashlytics.android.core.CrashlyticsCore.logException (CrashlyticsCore.java)
  at com.crashlytics.android.core.CrashlyticsCore.onPreExecute (CrashlyticsCore.java)
  at com.crashlytics.android.core.CrashlyticsCore.setCrashlyticsNdkDataProvider (CrashlyticsCore.java)
  at com.crashlytics.android.core.CrashlyticsCore.setString (CrashlyticsCore.java)
  at com.crashlytics.android.core.CrashlyticsCore.onPreExecute (CrashlyticsCore.java)
  at io.fabric.sdk.android.InitializationTask.onPreExecute (InitializationTask.java)
  at io.fabric.sdk.android.services.concurrency.AsyncTask.access$200 (AsyncTask.java)
  at io.fabric.sdk.android.services.concurrency.AsyncTask.access$300 (AsyncTask.java)
  at io.fabric.sdk.android.services.concurrency.AsyncTask.doInBackground (AsyncTask.java)
  at io.fabric.sdk.android.services.concurrency.AsyncTask.executeOnExecutor (AsyncTask.java)
  at io.fabric.sdk.android.services.concurrency.PriorityAsyncTask.addDependency (PriorityAsyncTask.java)
  at io.fabric.sdk.android.services.concurrency.PriorityAsyncTask.addDependency (PriorityAsyncTask.java)
  at io.fabric.sdk.android.services.concurrency.PriorityAsyncTask.executeOnExecutor (PriorityAsyncTask.java)
  at io.fabric.sdk.android.services.concurrency.PriorityAsyncTask.isFinished (PriorityAsyncTask.java)
  at io.fabric.sdk.android.services.concurrency.PriorityAsyncTask.setError (PriorityAsyncTask.java)
  at io.fabric.sdk.android.services.concurrency.PriorityAsyncTask.setFinished (PriorityAsyncTask.java)
  at io.fabric.sdk.android.Kit.initialize (Kit.java)
  at io.fabric.sdk.android.Fabric.access$300 (Fabric.java)
  at io.fabric.sdk.android.Fabric.getExecutorService (Fabric.java)
  at io.fabric.sdk.android.Fabric.getKitMap (Fabric.java)
  at io.fabric.sdk.android.Fabric.initializeKits (Fabric.java)
  at io.fabric.sdk.android.Fabric.init (Fabric.java)
  at io.fabric.sdk.android.Fabric.access$100 (Fabric.java)
  at io.fabric.sdk.android.Fabric.getIdentifier (Fabric.java)
  at io.fabric.sdk.android.Fabric.setFabric (Fabric.java)
  at io.fabric.sdk.android.Fabric.extractActivity (Fabric.java)
  at io.fabric.sdk.android.Fabric.getKits (Fabric.java)
  at io.fabric.sdk.android.Fabric.with (Fabric.java)
- locked <0x0b22d8d5> (a java.lang.Class<h.a.a.a.c>)
  at io.invertase.firebase.crashlytics.ReactNativeFirebaseCrashlyticsInitProvider.onCreate (ReactNativeFirebaseCrashlyticsInitProvider.java)
  at android.content.ContentProvider.attachInfo (ContentProvider.java:2092)
  at android.content.ContentProvider.attachInfo (ContentProvider.java:2066)
  at io.invertase.firebase.common.ReactNativeFirebaseInitProvider.attachInfo (ReactNativeFirebaseInitProvider.java)
  at android.app.ActivityThread.installProvider (ActivityThread.java:7237)
  at android.app.ActivityThread.installContentProviders (ActivityThread.java:6782)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:6693)
  at android.app.ActivityThread.access$1400 (ActivityThread.java:232)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2014)
  at android.os.Handler.dispatchMessage (Handler.java:107)
  at android.os.Looper.loop (Looper.java:241)
  at android.app.ActivityThread.main (ActivityThread.java:7617)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:492)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:941)
messaging needs-attention

Most helpful comment

I was also getting the same ANR. So i'm sharing my finding here with you all guys to reduce this ANR.

Memory Leak can be one reason for emitting this com.google.firebase.iid.firebaseinstanceidreceiver ANR.
So you can verify on Android profiler for memory leak, If memory leak issue is fixed then this ANR automatically come DOWN.

Hope this help to all you guys.

All 4 comments

I couldn't figure out how to label this issue, so I've labeled it for a human to triage. Hang tight.

Previously FIID broadcast handling was done and main thread and caused lots of ANR. It was fixed and rolled out earlier this year (not sure which release was in. Likely >= 20.1.3). IIRC, you updated the app to 20.2.4 but still sees many ANR crashes. Do you have any insights on the demographics of the SDK versions these crashes are on?

I was also getting the same ANR. So i'm sharing my finding here with you all guys to reduce this ANR.

Memory Leak can be one reason for emitting this com.google.firebase.iid.firebaseinstanceidreceiver ANR.
So you can verify on Android profiler for memory leak, If memory leak issue is fixed then this ANR automatically come DOWN.

Hope this help to all you guys.

Hi @zwu52 @google-oss-bot ,
Here is one use case in which we can reproduce this ANR.

I have many app in my phone which receive daily 200+ push-notification each-app every-day. So i putted my device offline for 2-3days, later then came to online and then started getting notification more than 1000+ PNs (older & pending PN).

Log Details:-
_#00 pc 0000000000071160 /system/lib64/libc.so (__epoll_pwait+8)
#00 pc 0000000000014200 /system/lib64/libutils.so (android::Looper::pollInner(int)+144)
#00 pc 00000000000140cc /system/lib64/libutils.so (android::Looper::pollOnce(int, int, int, void*)+60)
#00 pc 0000000000127264 /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv
, _jobject*, long, int)+44)
at android.os.MessageQueue.nativePollOnce (MessageQueue.java)
at android.os.MessageQueue.next (MessageQueue.java:326)
at android.os.Looper.loop (Looper.java:190)
at android.app.ActivityThread.main (ActivityThread.java:7212)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:499)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:942)_

Device details:-

Screenshot 2020-11-24 at 9 45 01 AM

* *
So in my opinion, if we receive many PN at same time this ANR surely occur.

@google-oss-bot @zwu52 kindly look on this use case. while receiving 500+ push-notifications is their a way to properly schedule these many push notification to prevent this happening?

Was this page helpful?
0 / 5 - 0 ratings

Related issues

gitton picture gitton  路  6Comments

SteveBurkert picture SteveBurkert  路  3Comments

Belka1000867 picture Belka1000867  路  3Comments

gwoodhouse picture gwoodhouse  路  4Comments

quiro91 picture quiro91  路  5Comments