メインコンテンツまでスキップ

アプリがバックグラウンドで通知を出し続ける理由

· 約4分

ステータスバーに通知が表示されたまま、消えてくれない。トラッカーをMeshtasticアプリに接続したときに現れて、スワイプしても何も起きない。アプリがフリーズしているのか、バッテリーを消費しているのか、それとも何か操作を間違えたのでしょうか?

どれも違います。これはまったく正常な動作で、アプリはちゃんと役目を果たしているだけです。この通知が何のためにあるのか、そしてバッテリーにどう影響するのかをご説明します。

SenseCAP T1000-Eを手に持ち、スマートフォンでMeshtasticアプリを表示

Androidがこのように動作する理由

数年前、Androidスマートフォンにはある問題がありました。アプリがバックグラウンドで動き続け、知らないうちにバッテリーやデータ通信を使ってしまうのです。そこでGoogleは、Android 8以降、バックグラウンドでの動作に厳しい制限を設けました。変わった点は2つあります。

  • アプリが画面の手前にない場合、Androidは数分後にバックグラウンドの動作を停止します。
  • スマートフォンを使わず画面を消したまま放置していると、Androidは省電力状態に入り、アプリをさらに一時停止します。

これはほとんどのアプリにとってバッテリー持ちを良くする、ありがたい仕組みです。しかし、音楽プレーヤー、ナビゲーション、フィットネストラッカー、そしてデバイスとの接続を保ち続けるアプリなど、バックグラウンドでも動き続ける必要が本当にあるアプリもあります。

そうしたケースのために、Androidは1つだけ公式の方法を用意しています。フォアグラウンドサービスです。フォアグラウンドサービスを動かしているアプリは、画面を消していても動作を続けることが許されます。ただしその代わりに、Androidは消えない通知を表示することを**義務づけています。**狙いは透明性です。アプリがバックグラウンドで動作してリソースを使っているなら、それがいつでも分かるようにしておくべき、という考え方です。サービスが動いている間は通知をスワイプして消せないのは、このためです。

Meshtasticにこれが必要な理由

スマートフォンとトラッカーの接続は、Bluetoothを通して行われます。役に立つためには、アプリは画面を見ているときだけでなく常にその接続を開いたままにしておく必要があります。そうすることで、次のことができます。

  • 仲間からのメッセージを、届いた瞬間に受信する
  • マップ上の位置情報を更新し続ける
  • バッテリー残量などのテレメトリを収集する
  • その情報を渡す(たとえばKarida Cloudやトラッキングサーバーへ)

もしアプリがバックグラウンドで動けなければ、スマートフォンをロックしてから数分以内にAndroidがBluetooth接続を切ってしまいます。そうなるとメッセージを取りこぼし、マップは止まってしまい、毎回アプリを開き直さなければなりません。消えない通知は、こうしたすべてを生かしておくための代償なのです。

バッテリーを消費しているのですか?

通知そのものはまったくコストがかかりません。ただのアイコンです。本当のコストは、Bluetooth接続を開いたままにしておくことです。ありがたいことに、トラッカーは省電力に設計されたBluetooth Low Energyを使っているため、ほとんどの方にとって1日を通しての影響はわずかです。接続を保ち続けることで多少バッテリーは使いますが、たとえばナビゲーションや動画のストリーミングなどに比べればはるかに少なくて済みます。

できること

  • 外出中はそのままにしておきましょう。 これはアプリが意図どおりに動いている状態で、メッセージが届き続けるのもこのおかげです。
  • 使い終わったら接続を解除しましょう。 その日の利用が終わったら、アプリでデバイスの接続を解除してください。フォアグラウンドサービスが停止し、通知も自動的に消えます。

さらに詳しく

仲間に共有できるよう、オフグリッドFAQに短い回答を用意しています。