AndroidのonPause処理時間の制約について

2019年6月13日

onPauseの処理時間の制約

onPauseは基本的に500ms以内に処理を終えないと、

システム側でonPause終了を待たずして、プロセスが突然killされることがあります。

 

onPauseの途中でアプリプロセスがkillされるのかしっかりと理由を把握するために、

onPauseで500ms以上時間がかかった場合の事象を次の項で見ていきましょう。

 

 

Activity pause timeout for ActivityRecordについて

500ms以上処理に時間がかかる場合、下記ログが出力されることがあります。

Activity pause timeout for ActivityRecord

 

Activity pause timeout for ActivityRecordが表示されると、システム側がアプリプロセスの閾値を下げることにより、他のアプリと比べて相対的に優先順位が低くなります。

他のアプリより優先順位が低くなるということは、

端末のメモリが不足している際などにアプリがバックグラウンド(背面)にいる場合は、

アプリが突然Killされる可能性が高くなります。

Activity pause timeout for ActivityRecordの解決策

onSaveInstanceStateのin~onPauseのout500ms以内に終わらせる必要があります。

そのためonPause内では、重い処理は行わないことを強く推奨します。

 

バックグラウンドでプロセスが突然killされる場合は、onPause内にて500ms以降の処理は行われないので、

onPause内の処理順序も考慮する必要があります。