Android 7.0でonStop()、onDestroy()が呼ばるのが遅れるバグ


致命的ではないバグですが、原因が分かるまでかなり時間を使ってしまったので、残しておきます。

発生条件

  • Android 7.0 (Nexus 9) で確認
  • Activity1にProgressBarを表示している
  • Activity1からActivity2に遷移する
  • バックキーをタップするなどしてActivity2を終了しActivity1に戻る
  • 画面はActivity1に戻るが、Activity2のonStop()、onDestroy()がすぐに呼ばれない
  • 10秒後にonStop()、onDestroy()が呼ばれる(そして次のような警告が出ている)
W/ActivityManager: Launch timeout has expired, giving up wake lock!

Activity終了時に「セーブしました」みたいなトーストを表示していたのに、表示されなくなったので気がつきました。

ProgressBarが表示されていないとこの問題は発生しません。また、Android 6.0.1 (Nexus 5)では発生しませんでした。

サンプルコード

動画

Android 7.0 (Nexus 9) ProgressBar表示

onStopが遅れる

Android 7.0 (Nexus 9) ProgressBar非表示

onStopが遅れない

Android 6.0.1 (Nexus 5) ProgressBar表示

onStopが遅れない

バグレポート

たぶん(?)Androidのバグだと思うので、バグレポートを上げてみました。
https://code.google.com/p/android/issues/detail?id=223871

何か間違い・勘違いがあったら教えていただけると嬉しいです

追記

Android 7.1.1では、ProgressBarに関してはこの問題は解決しているようですが、回転アニメーションなどがあると引き続きこの問題は発生しています。

(hackugyoさん、情報提供ありがとうございます