firebase / flutterfire

πŸ”₯ A collection of Firebase plugins for Flutter apps.
https://firebase.google.com/docs/flutter/setup
BSD 3-Clause "New" or "Revised" License
8.63k stars 3.95k forks source link

[firebase_messaing]: android.os.MessageQueue.nativePollOnce (Native method) #12832

Open Cengizhanerturan opened 3 months ago

Cengizhanerturan commented 3 months ago

Is there an existing issue for this?

Which plugins are affected?

In-App Messaging

Which platforms are affected?

Android

Description

Hi;

When a notification is sent while the application is in the foreground, it crashes with the android.os.MessageQueue.nativePollOnce (Native method) error. There is no issue with the first notification; it arrives promptly. However, subsequent notifications experience delays. After a while, all pending notifications arrive simultaneously, leading to a crash of the application.

Additionally, notifications are sent via "firebase-admin".

This problem has increased a lot in the last 6-7 months and continues to cause a lot of anr. I am submitting the "Logs & Breadcrumbs" and "Stack trace" information I received from Firebase Crashlytics.

Number of anr received in the last 90 days (31K); crashlytics_anr_count

main (native):tid=1 systid=18662 
#00 pc 0x86f8c libc.so (syscall + 28)
#01 pc 0x1b07a4 libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*) + 148)
#02 pc 0x3a544c libart.so (art::JNI<false>::CallObjectMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list) + 500)
#03 pc 0x4074 libnativehelper.so (_JNIEnv::CallObjectMethod(_jobject*, _jmethodID*, ...) + 124)
#04 pc 0xed358 libandroid_runtime.so (android::NativeDisplayEventReceiver::dispatchVsync(long, unsigned long, unsigned int) + 48)
#05 pc 0x93c28 libgui.so (android::DisplayEventDispatcher::handleEvent(int, int, void*) + 168)
#06 pc 0x1a064 libutils.so (android::Looper::pollInner(int) + 916)
#07 pc 0x19c68 libutils.so (android::Looper::pollOnce(int, int*, int*, void**) + 112)
#08 pc 0x118b3c libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int) + 44)
       at android.os.MessageQueue.nativePollOnce(Native method)
       at android.os.MessageQueue.next(MessageQueue.java:335)
       at android.os.Looper.loop(Looper.java:193)
       at android.app.ActivityThread.main(ActivityThread.java:8096)
       at java.lang.reflect.Method.invoke(Native method)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)

crashlytics_ss_1 crashlytics_ss_2 crashlytics_ss_3

[βœ“] Flutter (Channel stable, 3.13.5, on macOS 14.4.1 23E224 darwin-arm64, locale tr)
    β€’ Flutter version 3.13.5 on channel stable at /Users/cengizhan/Development/flutter
    β€’ Upstream repository https://github.com/flutter/flutter.git
    β€’ Framework revision 12fccda598 (8 ay ΓΆnce), 2023-09-19 13:56:11 -0700
    β€’ Engine revision bd986c5ed2
    β€’ Dart version 3.1.2
    β€’ DevTools version 2.25.0

[βœ“] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    β€’ Android SDK at /Users/cengizhan/Development/sdk
    β€’ Platform android-34, build-tools 34.0.0
    β€’ ANDROID_HOME = /Users/cengizhan/Development/sdk
    β€’ Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    β€’ Java version OpenJDK Runtime Environment (build 17.0.9+0-17.0.9b1087.7-11185874)
    β€’ All Android licenses accepted.

[βœ“] Xcode - develop for iOS and macOS (Xcode 15.3)
    β€’ Xcode at /Applications/Xcode.app/Contents/Developer
    β€’ Build 15E204a
    β€’ CocoaPods version 1.12.1

[βœ“] Chrome - develop for the web
    β€’ Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[βœ“] Android Studio (version 2023.2)
    β€’ Android Studio at /Applications/Android Studio.app/Contents
    β€’ Flutter plugin can be installed from:
      πŸ”¨ https://plugins.jetbrains.com/plugin/9212-flutter
    β€’ Dart plugin can be installed from:
      πŸ”¨ https://plugins.jetbrains.com/plugin/6351-dart
    β€’ android-studio-dir = /Applications/Android Studio.app
    β€’ Java version OpenJDK Runtime Environment (build 17.0.9+0-17.0.9b1087.7-11185874)

[βœ“] VS Code (version 1.89.1)
    β€’ VS Code at /Applications/Visual Studio Code.app/Contents
    β€’ Flutter extension version 3.76.0

[βœ“] Connected device (2 available)
    β€’ macOS (desktop) β€’ macos  β€’ darwin-arm64   β€’ macOS 14.4.1 23E224 darwin-arm64
    β€’ Chrome (web)    β€’ chrome β€’ web-javascript β€’ Google Chrome 125.0.6422.76

[βœ“] Network resources
    β€’ All expected network resources are available.

β€’ No issues found!

Packages

firebase_core: ^2.21.0 firebase_messaging: ^14.7.3

Reproducing the issue

  1. Launch the application on an Android device.
  2. Send multiple push notifications to the device within a short period.
  3. Notice the delay in receiving subsequent notifications.
  4. After some time, observe all pending notifications being delivered simultaneously, leading to a crash of the application.

Firebase Core version

2.21.0

Flutter Version

3.13.5

Relevant Log Output

main (native):tid=1 systid=18662 
#00 pc 0x86f8c libc.so (syscall + 28)
#01 pc 0x1b07a4 libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*) + 148)
#02 pc 0x3a544c libart.so (art::JNI<false>::CallObjectMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list) + 500)
#03 pc 0x4074 libnativehelper.so (_JNIEnv::CallObjectMethod(_jobject*, _jmethodID*, ...) + 124)
#04 pc 0xed358 libandroid_runtime.so (android::NativeDisplayEventReceiver::dispatchVsync(long, unsigned long, unsigned int) + 48)
#05 pc 0x93c28 libgui.so (android::DisplayEventDispatcher::handleEvent(int, int, void*) + 168)
#06 pc 0x1a064 libutils.so (android::Looper::pollInner(int) + 916)
#07 pc 0x19c68 libutils.so (android::Looper::pollOnce(int, int*, int*, void**) + 112)
#08 pc 0x118b3c libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int) + 44)
       at android.os.MessageQueue.nativePollOnce(Native method)
       at android.os.MessageQueue.next(MessageQueue.java:335)
       at android.os.Looper.loop(Looper.java:193)
       at android.app.ActivityThread.main(ActivityThread.java:8096)
       at java.lang.reflect.Method.invoke(Native method)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)

Flutter dependencies

Expand Flutter dependencies snippet
```yaml Replace this line with the contents of your `flutter pub deps -- --style=compact`. ```

Additional context and comments

No response

TarekkMA commented 3 months ago

Can you upgrade you firebase plugins versions and try again and see if the issue still remains?

Cengizhanerturan commented 3 months ago

Can you upgrade you firebase plugins versions and try again and see if the issue still remains?

@TarekkMA Thanks for your answer.

I need to update the flutter version in order to update the firebase versions, and this requires application-wide editing. For this reason, it doesn't seem possible for me to try this.

However, I shared screenshots showing the anrs received by users and the situations in which these anrs were received. Don't you think these screenshots document that anr occurs when a notification is received?

Cengizhanerturan commented 3 months ago

When a notification is sent while the application is in the foreground, it crashes with the android.os.MessageQueue.nativePollOnce (Native method) error. There is no issue with the first notification; it arrives promptly. However, subsequent notifications experience delays. After a while, all pending notifications arrive simultaneously, leading to a crash of the application.

Also, apart from the problem I mentioned here, there may be another problem on the firebase_messaging side. As I mentioned before, there is a notification activation in all received anr and anr occurs after this notification activity.

TarekkMA commented 3 months ago

Can you make a reproduction repo where this issue is happening? just the code that causes this issue to happen.

Cengizhanerturan commented 3 months ago

Can you make a reproduction repo where this issue is happening? just the code that causes this issue to happen.

@TarekkMA I cannot catch this problem, I am writing it here as a result of the notifications received by users using the application via Crashlytics.

dfdgsdfg commented 3 months ago

My report is not related firebasse_messaging. Sorry for the confusion. See below. https://github.com/ryanheise/audio_service/issues/875#issuecomment-2177815595

Same here.

Case1. Only android 14

          main (native):tid=1 systid=29182 
#00 pc 0x57840 libc.so (syscall + 32) (BuildId: 37f537c2ba9dcbb262a0a68f41a21da4)
#01 pc 0x232858 libart.so (art::ConditionVariable::WaitHoldingLocks + 140) (BuildId: 02bec5940be704b863f6514fc7d81c41)
#02 pc 0x55c044 libart.so (art::JNI<false>::CallObjectMethodV + 1140) (BuildId: 02bec5940be704b863f6514fc7d81c41)
#03 pc 0xe3994 libandroid_runtime.so (_JNIEnv::CallObjectMethod + 124) (BuildId: d29fc9115b65377a1a4cf15b069b9c2a)
#04 pc 0x153f70 libandroid_runtime.so (android::NativeDisplayEventReceiver::dispatchVsync + 68) (BuildId: d29fc9115b65377a1a4cf15b069b9c2a)
#05 pc 0xcba88 libgui.so (android::DisplayEventDispatcher::handleEvent + 280) (BuildId: 37fabcd36f9bbf3a645c2964fe397e4e)
#06 pc 0x18b70 libutils.so (android::Looper::pollInner + 1252) (BuildId: d0c24e3b7b6c7152eb82e77a5d2271e6)
#07 pc 0x18628 libutils.so (android::Looper::pollOnce + 124) (BuildId: d0c24e3b7b6c7152eb82e77a5d2271e6)
#08 pc 0x18f208 libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce + 48) (BuildId: d29fc9115b65377a1a4cf15b069b9c2a)
       at android.os.MessageQueue.nativePollOnce(Native method)
       at android.os.MessageQueue.next(MessageQueue.java:335)
       at android.os.Looper.loopOnce(Looper.java:187)
       at android.os.Looper.loop(Looper.java:319)
       at android.app.ActivityThread.main(ActivityThread.java:8919)
       at java.lang.reflect.Method.invoke(Native method)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)

Every Crashlytics report comes from Android 14

image

Case2. Android 11 ~ 14

          main (native):tid=1 systid=20182 
#00 pc 0x4deb0 libc.so (syscall + 32) (BuildId: 81e690796099642123738ebc3a07936c)
#01 pc 0x232858 libart.so (art::ConditionVariable::WaitHoldingLocks + 140) (BuildId: 02bec5940be704b863f6514fc7d81c41)
#02 pc 0x555134 libart.so (art::JNI<false>::FindClass + 1836) (BuildId: 02bec5940be704b863f6514fc7d81c41)
#03 pc 0x1269a8 libandroid_runtime.so (android::NativeDisplayEventReceiver::dispatchVsync + 80) (BuildId: 495478b5d27456788ccd1d734fe53ee9)
#04 pc 0xb8a34 libgui.so (android::DisplayEventDispatcher::handleEvent + 204) (BuildId: 9d052c980f9c2cd86f54f2793428e7db)
#05 pc 0x1716c libutils.so (android::Looper::pollInner + 916) (BuildId: eee35419973f1d9330ba7fca3b3f5bf7)
#06 pc 0x16d6c libutils.so (android::Looper::pollOnce + 116) (BuildId: eee35419973f1d9330ba7fca3b3f5bf7)
#07 pc 0x166288 libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce + 48) (BuildId: 495478b5d27456788ccd1d734fe53ee9)
       at android.os.MessageQueue.nativePollOnce(Native method)
       at android.os.MessageQueue.next(MessageQueue.java:335)
       at android.os.Looper.loopOnce(Looper.java:186)
       at android.os.Looper.loop(Looper.java:313)
       at android.app.ActivityThread.main(ActivityThread.java:8855)
       at java.lang.reflect.Method.invoke(Native method)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)

case2.txt case1-only android 14.txt

dfdgsdfg commented 3 months ago
russellwheatley commented 3 months ago

@dfdgsdfg - thank you for locating the issue, it appears to be an underlying issue, possibly from firebase-android-sdk or even the android OS itself. Not much we can do about that on FlutterFire.

dfdgsdfg commented 3 months ago

My report is not related firebasse_messaging. Sorry for the confusion. See below. https://github.com/ryanheise/audio_service/issues/875#issuecomment-2177815595

https://github.com/firebase/firebase-android-sdk/issues/4345#issuecomment-2084281469

ANR (MessageQueue.nativePollOnce). The following are very helpful for solving firebase ANR. (1) GLSurfaceView will display ANR on Android 11. (I don't understand why this is related to firebase. ) https://issuetracker.google.com/issues/269158607 (2) You need to minimize the cold start time of the application as much as possible. https://medium.com/bumble-tech/how-we-achieved-a-6x-reduction-of-anrs-part-2-fixing-anrs-24fedf9a973f (3) My suggestion is not to use Firebase Crashlytics. The crash analysis of Google Play Console is sufficient for us to use. In poor network conditions, Crashlytics will block the main thread when the application first starts, increasing the cold start time by 3 seconds(This is to request a token.), and can also cause ANR(MessageQueue.nativePollOnce).

dfdgsdfg commented 3 months ago

@dfdgsdfg - thank you for locating the issue, it appears to be an underlying issue, possibly from firebase-android-sdk or even the android OS itself. Not much we can do about that on FlutterFire.

My report is not related firebasse_messaging. Sorry for the confusion. See below. https://github.com/ryanheise/audio_service/issues/875#issuecomment-2177815595