iOS开发之程序各种状态监听

1、程序的五种状态
Not Running:未运行。
Inactive:前台非活动状态。处于前台,但是不能接受事件处理。
Active:前台活动状态。处于前台,能接受事件处理。
Background:后台状态。进入后台,如果又可执行代码,会执行代码,代码执行完毕,程序进行挂起。
Suspended:挂起状态。进入后台,不能执行代码,如果内存不足,程序会被杀死。

2、AppDelegate中的回调方法和通知
(1)回调方法:application:didFinishLaunchingWithOptions:
         本地通知:UIApplicationDidFinishLaunchingNotification
         触发时机:程序启动并进行初始化的时候后。
        适宜操作:这个阶段应该进行根视图的创建。
(2)回调方法:applicationDidBecomeActive:
         本地通知:UIApplicationDidBecomeActiveNotification
        触发时机:程序进入前台并处于活动状态时调用。
        适宜操作:这个阶段应该恢复UI状态(例如游戏状态)。
(3)回调方法:applicationWillResignActive:
         本地通知:UIApplicationWillResignActiveNotification
        触发时机:从活动状态进入非活动状态。
        适宜操作:这个阶段应该保存UI状态(例如游戏状态)。
 (4)回调方法:applicationDidEnterBackground:

本地通知:UIApplicationDidEnterBackgroundNotification
        触发时机:程序进入后台时调用。
         适宜操作:这个阶段应该保存用户数据,释放一些资源(例如释放数据库资源)。
(5)回调方法:applicationWillEnterForeground:
         本地通知:UIApplicationWillEnterForegroundNotification
        触发时机:程序进入前台,但是还没有处于活动状态时调用。
         适宜操作:这个阶段应该恢复用户数据。
(6)回调方法:applicationWillTerminate:
         本地通知:UIApplicationWillTerminateNotification
        触发时机:程序被杀死时调用。
         适宜操作:这个阶段应该进行释放一些资源和保存用户数据。
 
 3、程序启动
点击应用图标时,会经历三个状态:
Not running-->Inactive-->Active

Not running -->Inactive
调用 application:didFinishLaunchingWithOptions: 发送:UIApplicationDidFinishLaunchingNotification 
Inactive-->Active

调用 applicationDidBecomeActive: 发送:UIApplicationDidBecomeActiveNotification

4、程序Home
根据info.plist中Applicationdoes not run in background  /  UIApplicationExitsOnSuspend控制似乎否可以在后台运行或挂起。  
如果可以在后台运行或者挂起会经历
Active-->Inactive-->Background-->Suspended

Active-->Inactive 
调用 applicationWillResignActive: 发送:UIApplicationWillResignActiveNotification 
Background-->Suspended 
调用 applicationDidEnterBackground: 发送:UIApplicationDidEnterBackgroundNotification

如果不可以后台运行或挂起会经历
 Active-->Inactive-->Background-->Suspended-->NotRunning

Background-->Suspended 
调用 applicationDidEnterBackground: 发送:UIApplicationDidEnterBackgroundNotification  
Suspended-->Not Running 
调用 applicationWillTerminate: 发送:UIApplicationWillTerminateNotification

5、挂起后,重新运行
Suspended-->Background-->Inactive-->Active

Background-->Inactive 
 调用 applicationWillEnterForeground: 发送:UIApplicationWillEnterForegroundNotification 
 Inactive-->Active  
调用 applicationDidBecomeActive: 发送:UIApplicationDidBecomeActiveNotification

6、内存不足,杀死程序
 Background-->Suspended-->Notrunning
这种情况不会调用任何方法,也不会发送任何通知。

原文地址:https://www.cnblogs.com/hecanlin/p/12024390.html

时间: 2024-11-07 22:28:29

iOS开发之程序各种状态监听的相关文章

iOS开发:使用代理模式监听开关状态改变事件

记一次解决跨控制器监听开关状态改变的尝试. 为了统一设置UITableViewCell里的内容,自定义了UITableViewCell类的一个基类,命名为SettingCell.SettingCell里显示的内容由数据模型SettingItem提供:在SettingCell里定义一个属性即可. @property (nonatomic, strong) SettingItem *item; 再定义几个SettingItem的子类表示显示不同内容的Cell(如图1).由于所有开关状态的归档和解档都

iOS开发网络篇—监测网络状态

iOS开发网络篇—监测网络状态 一.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 WIFI\3G网络:自动下载高清图片 低速网络:只下载缩略图 没有网络:只显示离线的缓存数据 苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态 https://developer.apple.com/library/ios/samp

Android 开发事件响应之基于监听的事件响应

Android 开发事件响应之基于监听的事件响应 本文将介绍Android 操作系统如何通过监听来实现对事件的响应. Android 开发事件响应之基于监听的事件响应 背景介绍 Android 开发事件响应类型 内部类 匿名内部类 外部类 直接绑定标签 总结 背景介绍 对于任何可视化开发来说,都会涉及到对控件的响应.我们通过举例:实现对Button 按钮的点击来讲解Android 里面对事件相应的办法. Android 开发事件响应类型 在Android 开发中,有两种方式可以对事件作出响应,分

蓝牙那些事之状态监听

对于蓝牙状态的监听事件,此篇文章讲的是对于手机蓝牙的或者是设备自身蓝牙状态的监听,而并非是远程设备蓝牙状态的监听,当然如果要监听远程设备的蓝牙状态也不是没有办法,相对于监听自身蓝牙状态难度更大,资料页相对较少. 如果要监听本身蓝牙状态,还是要注册广播 1 //注册广播接收器(监听蓝牙状态的改变) 2 IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 3 4 filter.addAction(Bluetoot

Android USB大容量存储时SD卡状态监听(转)

对SD卡状态监听,到现在为止我知道的有两种方式: 1.注册StorageEventListener来监听sd卡状态 StorageEventListener中有onStorageStateChanged()方法,当sd卡状态改变时,此方法会调用,对各状态的判断一般会用到Environment类,此类中包含的有关sd卡状态的常量有: MEDIA_BAD_REMOVAL:表明SDCard 被卸载前己被移除 MEDIA_CHECKING:表明对象正在磁盘检查 MEDIA_MOUNTED:表明sd对象是

Android开发之使用BroadcastReceiver实时监听电量(源代码分享)

Android系统中实时的监听手机电量以及开机启动功能都是通过BroadcastReceiver组件实现的.我们可以动态注册这个类的一个实例通过Context.registerReceiver()方法或者静态注册,通过<Receiver>标记在androidmanifest . xml.注意:如果我们注册一个接收器在Activity.onResume()实现,我们应该注销Activity在Activity生命周期的onPause方法中.(这将减少不必要的系统开销).切记不能注销Activity

网络状态监听

网络状态监听 定义一个广播接收器和状态变化接口 publicclassNetBroadcastReceiverextendsBroadcastReceiver{ publicstaticArrayList<NetEventHandler> mListeners =newArrayList<NetEventHandler>(); privatestaticString NET_CHANGE_ACTION ="android.net.conn.CONNECTIVITY_CHA

ThinkAndroid框架 网络状态监听原理

ThinkAndroid框架 网络状态监听原理,有需要的朋友可以参考下. 现在用到网络监听的地方越来越广泛,这里提供下ThinkAndroid里的实现方法,还是根据功能原理倒着给出代码: 1.网络状态会发出广播,监听网络状态肯定通过广播接收者实现,广播接受者: /** * @Title NetworkStateReceiver * @Package com.ta.util.netstate * @Description 是一个检测网络状态改变的,需要配置 <receiver * android:

Unity3d开发(十八) 监听编辑器状态改变,制定自定义回调

div#cpcontent2 {height:215px;width:215px;float:left;} div#cpmenu {height:200px;float:left;} div#cpcontent {height:200px;width:150px;float:left;} 文章作者:松阳 原文链接:http://blog.csdn.net/fansongy/article/details/53318791 做编辑器插件时,我总是想要拿到监听编辑器的状态变化.比如在打开编辑器开始运