programing

ANR 오류 "Broadcast of Intent {act=com.google.화력 기지인스턴스_ID_EVENT"... "파이어베이스"인스턴스 IDAndroid 7.1 및 8.0용 "내부 수신기"

yellowcard 2023. 6. 9. 21:56
반응형

ANR 오류 "Broadcast of Intent {act=com.google.화력 기지인스턴스_ID_EVENT"... "파이어베이스"인스턴스 IDAndroid 7.1 및 8.0용 "내부 수신기"

최근에 보고된 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을 유발하는 초보적인 실수를 하지 않는다는 것을 증명합니다.

저는 이 버그를 재현하는 데 정말 어려움을 겪고 있습니다.8.에만 있기 이 있을 수 하지만 Android 7.1을 사용하는 입니다.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 if the user has logged in at least once
            OurAppNameApplication.getInstance().getOurAppNameService().registerDeviceWithRetry();
        }
    }
}

Google Play Services 및 Firebase 버전 11.2.0을 사용합니다.목표 SdkVersion은 25입니다.

PS: 코드mAnalytics.init(...)위에서는 Flurry를 초기화하므로 StrictMode 경고를 표시합니다.하지만 이것은 디스크 액세스이지 네트워크 트래픽이 아닙니다.그리고 넣는 것.SystemClock.sleep(20000);이 위치에서는 ANR이 트리거되지 않습니다.

왜 우리는 ANR을 받아야 하며, 이것을 피하기 위해 무엇을 할 수 있을까요?

--

편집: 밥 스나이더의 댓글에 있는 제안에 따라, 저는 테스트를 시도했습니다.adb shell cmd appops set com.our.package.name RUN_IN_BACKGROUND ignore그러나 이는 ANR을 생성하지 않으며 로그cat에 표시된 대로 브로드캐스트 수신기의 실행을 중지시킬 뿐입니다.

09-21 10:39:25.314 943-6730/? W/ActivityManager: Background start not allowed: service Intent { act=com.google.firebase.INSTANCE_ID_EVENT pkg=com.our.package.name cmp=com.our.package.name/com.our.package.service.notifications.InstanceIdService (has extras) } to com.our.package.name/com.our.package.service.notifications.InstanceIdService from pid=4062 uid=10139 pkg=com.our.package.name
09-21 10:39:25.314 4062-4062/com.our.package.name E/FirebaseInstanceId: Error while delivering the message: ServiceIntent not found.

제 결론은 이것이 이 ANR 오류를 재현하는 올바른 방법이 아닐 수도 있다는 것입니다.

완전성을 위해:테스트 시 사용되는 모든 ADB 명령은 다음과 같습니다.

adb shell dumpsys deviceidle force-idle
adb shell dumpsys battery unplug
adb shell am set-inactive com.our.package.name true
adb install -r our-app.apk
adb shell cmd appops set com.our.package.name RUN_IN_BACKGROUND ignore

- 은 (으)와 병렬로 여러 번 운행됩니다.adb install설치 및 복원(설정)이 완료되고 설치 후 Firebase 등록 토큰이 자동으로 새로 고쳐집니다.

이것은 FCM SDK의 9월 18일 릴리스에서 수정된 버그입니다.

메시지를 수신할 때 ANR(Android Not Response) 오류로 인해 앱이 때때로 중단되는 문제를 해결했습니다.

로 업데이트 입니다.com.google.firebase:firebase-messaging:17.3.2또는 나중에 문제를 해결해야 합니다.그래도 문제가 해결되지 않으면 지원팀에 문의하십시오.

의 의최버전시오시십도하을신을 사용해 보세요.Firebase그리고.Play Services SDKs(11.4.2절).또한 사용자의targetSDKVersion26까지BuildToolsVersion26.0.2로 변경합니다.

Android 8.0에서 실행되는 Google 픽셀/Nexus 장치에서도 동일한 오류가 발생했습니다.모든 라이브러리를 업데이트한 후 새로운 보고서를 받지 못했습니다.

왜 우리는 이 ANR을 얻게 되고, 이것을 피하기 위해 무엇을 할 수 있을까요?

왜 이런 일이 일어나는지 잘 모르겠습니다.이유를 알고 싶어서 파이어베이스 지원팀에도 연락했는데, 그들은 mcve를 요청했고, 무엇이 문제의 원인인지 모르기 때문에 mcve를 제공할 수 없었습니다.저는 제 앱에서 파이어베이스 인증만 사용하고 있기 때문에 이 문제와 관련이 있다고 확신합니다.

응용 프로그램 메모리 누수가 이 com.google을 내보내는 한 가지 이유일 수 있습니다.파이어베이스.id.Firebase 인스턴스 ID 수신기 ANR.

따라서 안드로이드 프로파일러에서 앱 메모리 누수를 확인할 수 있습니다. 메모리 누수 문제가 해결되면 이 ANR이 자동으로 내려갑니다.

이것이 여러분 모두에게 도움이 되길 바랍니다.

언급URL : https://stackoverflow.com/questions/46317504/anr-error-broadcast-of-intent-act-com-google-firebase-instance-id-event

반응형