

Android の「Muting recently noisy」ログは通知チャンネルの話じゃない
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
Logcatで見かける以下のエラーログについて、通知チャンネルが原因になっている、という説明を見かけたので中身を確認した。
E NotificationService: Muting recently noisy 0|com.example.app|16|null|10011ログの中身
| 区切りの部分は userId|パッケージ名|notification id|tag|uid という並び。今回の例だと以下の意味になる。
0: ユーザーID(マルチユーザー端末での識別子。通常端末なら0)com.example.app: 通知を送っているパッケージ名16:notify()を呼ぶときに指定する notification idnull: tag(未指定ならnull)10011: そのアプリのUID
これは通知チャンネルのIDではない。NotificationManager.notify(tag, id, notification) で識別される、個別の通知インスタンスを指すキーになっている。通知チャンネル(NotificationChannel)とは別の概念。
何をしているログか
これは NotificationManagerService 内のレート制限処理のログで、短時間に大量の通知を出しているアプリに対して、システムが個々の通知のアラート(音・バイブ・ヘッズアップ表示)を一時的に間引いている、という内容。実機のログでは直後にこういう行が続くことが多い。
E NotificationService: Package enqueue rate is 5.6. Shedding 0|com.example.app|16|null|10011. package=com.example.appenqueue rate がしきい値を超えたパッケージの通知を間引いている、というのがそのままの意味。
アプリ側の対応
原因はアプリが短時間に通知を出しすぎていること。対応としては以下が有効。
- 同一内容の通知を短時間に連投しない(
id/tagを使って更新にまとめる) - 重要度の低い通知はそもそも送らないか、
IMPORTANCE_LOW以下のチャンネルに寄せる - 通知の重要度に応じてチャンネルを分ける(緊急系と情報系を分離するなど)
通知チャンネル自体はこの問題と無関係ではなく、重要度設定として使うのは正しい対策の一つではある。ただしログに出ているキーそのものが通知チャンネルを指しているわけではない、という点は分けて理解しておく必要がある。