簡體   English   中英

FCM 通知在前台崩潰 MIUI - Android

[英]FCM Notification Crashes MIUI on Foreground - Android

我用我的應用程序測試推送通知。 當應用程序在前台、后台運行或被終止時,有 contentIntent 來處理通知哪個活動

在我的 HTC Desire 816 上

  1. 單擊通知以在應用程序被殺死時啟動活動(工作正常)

  2. 當應用程序在前台運行時單擊通知以啟動活動(工作正常)

  3. 當應用程序在后台運行時單擊通知以啟動活動(工作正常)

但是當我在小米 Note 4(MIUI 10)上測試時

  1. 單擊通知以在應用程序被殺死時啟動活動(工作正常)

  2. 當應用程序在前台運行時單擊通知以啟動活動(崩潰 - 應用程序已停止)

  3. 當應用程序在后台運行時單擊通知以啟動活動(崩潰 - 應用程序已停止)

日志貓:

java.lang.OutOfMemoryError: Failed to allocate a 100000012 byte allocation with 16777216 free bytes and 82MB until OOM
        at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
        at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
        at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:624)
        at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:457)
        at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1152)
        at android.content.res.ResourcesImpl.createFromResourceStream(ResourcesImpl.java:1296)
        at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:743)
        at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:585)
        at android.content.res.MiuiResourcesImpl.loadDrawable(MiuiResourcesImpl.java:317)
        at android.content.res.Resources.loadDrawable(Resources.java:872)
        at android.content.res.TypedArray.getDrawable(TypedArray.java:930)
        at android.widget.ImageView.<init>(ImageView.java:157)
        at android.widget.ImageView.<init>(ImageView.java:145)
        at androidx.appcompat.widget.AppCompatImageView.<init>(AppCompatImageView.java:72)
        at androidx.appcompat.widget.AppCompatImageView.<init>(AppCompatImageView.java:68)
        at androidx.appcompat.app.AppCompatViewInflater.createImageView(AppCompatViewInflater.java:187)
        at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:107)
        at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1407)
        at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1457)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:794)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:752)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:883)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:846)
        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1019)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:879)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:846)
        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1019)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:879)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:846)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:522)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:430)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
        at com.app.MainActivity.onCreate(MainActivity.java:62)
which is -> ( setContentView(R.layout.activity_main); )
        at android.app.Activity.performCreate(Activity.java:6845)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2700)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2808)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1541)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:165)
        at android.app.ActivityThread.main(ActivityThread.java:6375)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)

嘗試更改標志、添加請求 ID 和我的東西,但沒有運氣

        super.onMessageReceived(remoteMessage);
            showNotification(remoteMessage.getNotification().getTitle(),remoteMessage.getNotification().getBody());
    }

   private void showNotification(String title, String body){
        NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
        String NOTIFICATION_CHANNEL_ID = "com.hyatna_eg.hyatna";
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
                PendingIntent.FLAG_ONE_SHOT);
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
        {
            NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "Notification", NotificationManager.IMPORTANCE_DEFAULT);
            notificationChannel.setDescription("Hyatna Channel");
            notificationChannel.enableLights(true);
            notificationChannel.setLightColor(Color.BLUE);
            notificationChannel.setVibrationPattern(new long[]{0,1000,500,1000});
            notificationManager.createNotificationChannel(notificationChannel);

        }
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this,NOTIFICATION_CHANNEL_ID);
        notificationBuilder.setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL).setWhen(System.currentTimeMillis())
                .setSmallIcon(R.drawable.ic_notification)
                .setContentTitle(title)
                .setContentText(body)
                .setDefaults(Notification.DEFAULT_ALL)
                .setPriority(NotificationManager.IMPORTANCE_HIGH)
                .setPriority(Notification.PRIORITY_MAX)
                .setPriority(NotificationCompat.PRIORITY_MAX)
                .setSound(uri)
                .setContentIntent(pendingIntent)
                .setContentInfo("Info");

        notificationManager.notify(new Random().nextInt(),notificationBuilder.build());


    }

預計它可以像 HTC 一樣正常工作,但我不知道為什么讓我崩潰?

您必須加載非常高分辨率的圖像,這會導致MainActivity中出現OutOfMemoryError異常。

預計它可以像 HTC 一樣正常工作,但我不知道為什么讓我崩潰?

它在 HTC 上工作,因為它的 PPI 密度是 267,而小米是 401。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM