[検証バージョン]
Unity 5.1.2p2
iOSシミュレータ 8.4
Android Genymotion 4.2.2 API 17
アプリがバックグラウンドに入った時・および復帰した時の処理を記述するMonoBehaviour.OnApplicationPause()。
この中に記述する処理が重く時間がかかり途中でアプリが強制終了された場合、どのような挙動になるのか検証してみた。
・検証方法
OnApplicationPauseでバックグラウンド退避時の処理中に数秒待機してデバッグプリントを行う。
using UnityEngine; public class GameController : MonoBehaviour { void OnApplicationPause(bool isPause) { if (isPause) { Debug.Log("OnApplicationPause()"); System.Threading.Thread.Sleep(3000); Debug.Log("3 seconds lator.."); } } }
・iOSの場合
アプリ起動中にホームボタン2度押し→アプリを終了
-> applicationWillResignActive() OnApplicationPause() 3 seconds lator.. -> applicationDidEnterBackground() -> applicationWillTerminate()
ちゃんと3秒後にデバッグプリントされた後に、バックグラウンド→終了となっている。
ただし、OnApplicationPauseをコルーチンにした場合はバックグラウンドに入った時点で処理が一時停止してしまうので注意が必要。
・Androidの場合
ハードウェアボタンでアプリの一覧を表示→アプリを終了
OnApplicationPause()のデバッグプリントのみで、処理は途中で中断されてしまった?
Androidの場合は、OnApplicationPause()での処理には注意が必要みたい。