前提
- Gradle 7.2
- Android Gradle Plugin 7.0.2
- androidx.work:work-runtime:2.6.0
事案
長時間Workerのために、setForegroundAsync()した通知がdoWork終了後に残り、通知を消せなくなる場合がある。
※KotlinでsetForegroundAsync()に相当するsetForeground()については確認していない。
setForegroundAsyncという名の通り、非同期で通知を上げ、それがForegroundService扱いでタスクキルされない仕組みのようである。
通知が非同期表示される前に、doWorkが終了した場合、当該事案が発生した。
解決?
stackoverflowにて投稿を発見。
その中の自己解決の書き込みによると、
Google Trackerにて
setForegroundAsync(ForegroundInfo).get();
すると、getコールで同期的に通知が上がるよ~
と回答があったらしい。 ※ログ不明
しかしThis not working for meというレスもついているため、
おまじないとして、doWork終了前にsetForegroundAsync().get()をコールすると幸せになれるかもしれない。
以上。