Android SDK を開発し、Android 11 Beta のテスト中に、まだ報告されていないように見える問題を発見しました。
Android 11 では、場所、マイク、カメラのアクセス許可に対して、新しい 1 回限りのアクセス許可が導入されました。このオプションを使用すると、ユーザーがアプリケーションを離れるとすぐに、権限が取り消されます (詳細については、こちらを参照してください)。
問題は、アプリがフォアグラウンドでなくなってからしばらくすると (アプリを強制終了する必要はありません。最小化するだけで十分です)、アプリが強制されたかのように、将来スケジュールされたすべてのアラームまたはジョブが削除されることです。殺された。これは、このレベルの権限でのみ発生します。他のレベルを拒否または提供すると、以前にスケジュールされたアラームまたはジョブが期待どおりに維持されます。これはベータ 3 ビルドで、RPB3.200720.005 ビルド番号の Pixel 2 エミュレーターで再現されています。このリポジトリでは、バグを再現するためのサンプル アプリを見つけることができます。
この 1 つのアクティビティ アプリは、次の 5 分でアラームを鳴らし、5 ~ 6 分の間にトリガーするジョブをスケジュールします。画面には 3 つのボタンがあり、それぞれが対応する許可要求をトリガーします。JobService クラスと BroadcastReceiver クラスは、トリガーされたことのみをログに記録します。この状況は、次の手順の後に再現できます。
- アプリが開始されるたびに、両方を実行
adb shell dumpsys alarm | grep com.example.permissions.app
しadb shell dumpsys jobscheduler | grep com.example.permissions.app
て、アラームとジョブの両方がスケジュールされていることを確認できます。 - いずれかのボタンをクリックして、1 回限りのアクセス許可レベルを付与します。
- アプリを最小化します (ホーム画面に移動するか、他のアプリを開くことができます);
- 約 1 分後、 と の両方
adb shell dumpsys alarm | grep com.example.permissions.app
を実行しadb shell dumpsys jobscheduler | grep com.example.permissions.app
ます。アラームとジョブは表示されなくなります。 - ジョブとアラームの両方の元のスケジュールされた時間 (システムの遅延を考慮して) を待機すると、それらがトリガーされないことが示されます。
同様の状況に遭遇した人はいますか?私たちの推測では、1 回限りのアクセス許可を取り消すために、これらの副作用を引き起こしている何らかの方法でアプリ プロセスが強制終了されています。また、 Android Issue Trackerに問題を提出しました。Google が回答した場合は、この投稿を更新し続けます。