如何禁止App在后台运行以及如何保存和恢复App的状态
2016-02-09 10:25
513 查看
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)
而App中的任何View也有类似的生存周期:
如果App处在非活动的状态下,那么接着它将进入挂起状态.
某些情况下我们可能不希望这样,我们想要当App进入后台时就将其结束掉.可以通过修改项目的info.plist文件来实现:
如上图,将Application does not run in background设置为YES就可以做到这一点.这时当你在运行App时按Home键后,你的App不会进入后台而是直接被结果掉了,下一次运行你的App将会重新运行.
举一个UI的例子,在主界面上有一个Text控件:
我们希望在输入一些字符,当App关掉再次运行的时候之前输入的那些字符会自动显示在Text中.
首先在Main.stroyboard中将ViewController的Restoration ID设置为viewController:
然后在AppDelegate.m中添加如下回调方法:
如果你想要保存App级别的数据可以使用以下2个回调方法:
如果你想要保存某个View界面中的数据,就像一开始说的那样,你可以在ViewController.m里添加如下2个方法:
现在你运行App,输入一些字符然后关闭App.当你再次运行该App时你会发现View界面中的文本框会显示之前输入的字符串:
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)
如果禁止App在后台运行
iOS上的App类似于Windows上的进程,有几种不同的生存周期:而App中的任何View也有类似的生存周期:
如果App处在非活动的状态下,那么接着它将进入挂起状态.
某些情况下我们可能不希望这样,我们想要当App进入后台时就将其结束掉.可以通过修改项目的info.plist文件来实现:
如上图,将Application does not run in background设置为YES就可以做到这一点.这时当你在运行App时按Home键后,你的App不会进入后台而是直接被结果掉了,下一次运行你的App将会重新运行.
如何保存和恢复App的状态
第二个问题是如果App不从后台恢复的话如何自动保存其之前的状态呢?举一个UI的例子,在主界面上有一个Text控件:
[code]@property (weak, nonatomic) IBOutlet UITextField *inputText;
我们希望在输入一些字符,当App关掉再次运行的时候之前输入的那些字符会自动显示在Text中.
首先在Main.stroyboard中将ViewController的Restoration ID设置为viewController:
然后在AppDelegate.m中添加如下回调方法:
[code]-(BOOL)application:(UIApplication*)application shouldSaveApplicationState: (nonnull NSCoder *)coder{ return YES; } -(BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder{ return YES; }
如果你想要保存App级别的数据可以使用以下2个回调方法:
[code]-(void)application:(UIApplication *)application didDecodeRestorableStateWithCoder:(NSCoder *)coder{ float val = [coder decodeFloatForKey:kAppValue]; NSLog(@"value is %f",val); } -(void)application:(UIApplication *)application willEncodeRestorableStateWithCoder:(nonnull NSCoder *)coder{ [coder encodeFloat:99.99 forKey:kAppValue]; }
如果你想要保存某个View界面中的数据,就像一开始说的那样,你可以在ViewController.m里添加如下2个方法:
[code]-(void)decodeRestorableStateWithCoder:(NSCoder *)coder{ [super decodeRestorableStateWithCoder:coder]; self.inputText.text = [coder decodeObjectForKey:kSaveKey]; } -(void)encodeRestorableStateWithCoder:(NSCoder *)coder{ [super encodeRestorableStateWithCoder:coder]; [coder encodeObject:self.inputText.text forKey:kSaveKey]; }
现在你运行App,输入一些字符然后关闭App.当你再次运行该App时你会发现View界面中的文本框会显示之前输入的字符串:
相关文章推荐
- 源码解析Android中View的measure量算过程
- 【Android】7.0 第7章 简单适配器和布局--本章示例主界面
- android优化原理
- Unity实战开发之《代码汪的第一步》
- NSGAIII中的normalization objectives
- Swift基础语法学习总结二
- Swift基础语法学习总结一
- JacksonWant ——iOS系统学习笔记(二)
- 【Android开发小记--18】SharedPreferences 以及 PreferenceActivity
- JacksonWant ——iOS系统学习笔记(一)
- android bitmap compress
- 微信好友数据统计,能测出删除你的好友
- objc运行时,方法交换 模板示例
- Android 前后台切换与OpenGL(EGL)创建销毁的周期
- Android开发笔记(五十八)铃声与震动
- 2.4 Android SDK在线更新镜像服务器,Androidsdk 在线更新
- Android 混淆代码总结
- IOS利用Runtime自定义控制器POP手势动画
- ecplise 中导入 Android design support library
- Unity3D之Vector3.Dot和Vector3.Cross的使用