从Android O Api创建通知通道的正确方法

sam*_*m_k 10 android android-notifications android-8.0-oreo notification-channel

从Android O(API 26)版本引入的通知渠道.我从以下链接中了解到它:

问题:

  1. 如果我有多个通知数,那么在应用程序启动时创建通知通道并将其保留在最佳状态是否是个好主意ApplicationScope

    public void addNotificationChannels(Context context) {
    
        List<NotificationChannel> channels = new ArrayList<>();
        channels.add("channel_1");
        channels.add("channel_2");
        .
        .
        channels.add("channel_7");
    
        NotificationManager notificationManager =
            (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannels(channels);
    
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果我new Notification.Builder(getApplicationContext(), PRIMARY_CHANNEL)在将通道添加到通知管理器之前尝试执行此行,会发生什么

M66*_*66B 10

我要做的是扩展应用程序类(不要忘了用类名更新应用程序的清单),并在onCreate方法中创建一次通知通道。这样可以确保在构建通知时始终创建通知通道。

恕我直言,这是浪费CPU周期(尝试)为每个通知一遍又一遍地创建通知通道。

附带说明:我也总是以这种方式记录应用程序版本,这在有人发送logcat时非常有用。

  • 我现在正在这样做。在MyApplication类的`onCreate()`方法中创建它们。那是正确的方法吗? (2认同)
  • 在每次应用程序启动时创建通知通道不是浪费 CPU 周期吗? (2认同)

Ric*_*ard 7

A)在创建通知的同时:

正如文档所说:

使用其原始值创建现有通知通道不会执行任何操作,因此在启动应用程序时调用此代码是安全的。

因此,您可以在创建通知本身的同时安全地创建通知通道,无需检查通道是否已创建。

B)内部应用程序或任何活动/片段。

注意:如果您使用原始 FCM,则在 SDK 为您发布通知之前创建通道很有趣,因为根据推送有效负载参数android_channel_id,您可以将该推送关联到应用程序中已创建的特定通道。

Fcm 有效负载:https://firebase.google.com/docs/cloud-messaging/http-server-ref


Arn*_* M. 6

  1. 理想情况下,您应该在向其发布通知时创建频道.createNotificationChannel使用之前使用的相同ID 调用是安全的,不会重新创建它.
  2. 您的申请不会发布此通知.系统可能会显示警告,即您的应用不允许发布此通知.

  • 但是这种通用方法调用了100次,并且调用createChannel 100次并不是一个好主意. (6认同)