iOS App
官方文档:
一个参考了一个有趣的博客:
一个 iOS 的声明周期中会有以下的五种状态,下图列举官网中对这五种状态之间切换的示例:
这些声明周期的转换中也有一些相关的 HOOK 函数,那下图这个流程中的编号举例子:
这个变换流程中,有两个声明周期函数:
willFinishLaunchingWithOptions
:如果你的程序启动成功的话,这个是整个应用第一次执行的代码;didFinishLaunchingWithOptions
:在屏幕上即将显示任何画面之前执行的函数;
在程序进入 Active 状态之后,会执行:
applicationDidBecomeActive
;applicationWillResignActive
:当用户点击了 Home 键或者启动了其他应用程序之后,会执行这个函数;与此同时,系统还会发出一个信号UIApplicationWillResignActiveNotification
。applicationDidEnterBackground
:在上面的一个流程之后,程序会从 Inactive 状态进入 Background 状态,同时触发这个 hook 函数;applicationWIllEnterForeground
:如果应用程序在被操作系统杀死之前,再次被打开进入 Foregound,则会触发这个 hook 函数;Backgound -> Suspended
;Suspended -> Backgound
;如果应用进入后台后 5s 不执行任何计算任务,操作系统则会把它置为暂停状态;相反则会回到后台状态。那是这两个状态之间的切换对程序员是透明的,也就是说无法 HOOK 到这两个状态的切换。
applicationWillTerminate
:如果应用程序在后台时,就被操作系统杀死了,则会触发这个函数;