小编Eir*_*k W的帖子

ANR错误"广播Intent {act = com.google.firebase.INSTANCE_ID_EVENT"..."FirebaseInstanceIdInternalReceiver"for Android 7.1和8.0

我们有一个Android应用,最近报告了很多ANR错误.这仅发生在Android 7.1和8.0上(不在例如4.4,5.0或6.0上).ANR是:

Broadcast of Intent { act=com.google.firebase.INSTANCE_ID_EVENT flg=0x14 cmp=com.our.package.name/com.google.firebase.iid.FirebaseInstanceIdInternalReceiver (has extras) }

问题是:为什么我们得到这个ANR,我们可以做些什么来避免这种情况?请注意,这在早期的Android版本中运行良好,我认为这证明我们没有做任何导致ANR的新手错误.

我很难再现这个bug.由于它仅适用于Android 7.1和8.0,我认为它可能与新的打盹模式和节省电池有关,但即使使用adb shell dumpsys deviceidle force-idle ,测试也不能重现这个问题,也没有放在SystemClock.sleep(20000);几个地方.

我们的代码InstanceIdService是:

public class InstanceIdService extends FirebaseInstanceIdService {
    private Analytics mAnalytics;

    @Override
    public void onCreate() {
        super.onCreate();

        mAnalytics = new AnalyticsImpl();
        boolean isFullVersion = getApplicationContext().getPackageName().endsWith("full");
        mAnalytics.init(getApplicationContext(), isFullVersion);
    }

    @Override
    public void onTokenRefresh() {
        boolean initialLoginSucceeded = OurAppNameApplication.getInstance().getSettings().getInitialLoginSucceeded();
        mAnalytics.logEvent("FCM_Token_Refresh_Triggered", "initialLoginSucceeded", String.valueOf(initialLoginSucceeded));

        if (initialLoginSucceeded) { // We only report the FCM token to our server …
Run Code Online (Sandbox Code Playgroud)

android firebase firebase-cloud-messaging android-7.1-nougat android-8.0-oreo

39
推荐指数
2
解决办法
5211
查看次数