如何禁止App在后台运行以及如何保存和恢复App的状态
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! 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控件:
@property (weak, nonatomic) IBOutlet UITextField *inputText;
我们希望在输入一些字符,当App关掉再次运行的时候之前输入的那些字符会自动显示在Text中.
首先在Main.stroyboard中将ViewController的Restoration ID设置为viewController:
然后在AppDelegate.m中添加如下回调方法:
-(BOOL)application:(UIApplication*)application shouldSaveApplicationState:
(nonnull NSCoder *)coder{
return YES;
}
-(BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder{
return YES;
}
如果你想要保存App级别的数据可以使用以下2个回调方法:
-(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个方法:
-(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界面中的文本框会显示之前输入的字符串:
如何禁止App在后台运行以及如何保存和恢复App的状态的更多相关文章
- App在后台运行时如何保存数据到sqlite数据库
iOS程序进入后台后,是不允许读写任何文件和数据库(sqlite),但是允许读写NSUserDefault中的数据. 因此在后台时如果想存储数据,则可使用NSUserDefault(偏好设置)临时保存 ...
- App在后台运行
App有三种状态: 1. 死亡状态(未打开App); 2. 前台运行状态(打开状态); 3. 后台暂停状态(停止所有动画, 定时器, 多媒体联网等操作) 4. 后台运行状态(后台运行); ------ ...
- 安卓开发app在后台运行时页面数据被系统清除后操作之重启APP
在安卓开发过程中,当点击HOME键,将app运行在后台时,然后再点击app图标进入时,遇到了如下两种情况: 1.每次打开时,app的入口页面总是被执行. 2.当运行内存被其它应用占用完时,在进入app ...
- iOS保持App真后台运行
https://www.jianshu.com/p/d466f2da0d33 在我看来,苹果系统与安卓系统最直观的区别就是后台处理方式了吧,安卓手机一旦开启了很多app放到后台,即使前台什么也不做,就 ...
- app额外后台运行操作
//在视图中运行操作中进行周期操作 - (void)applicationDidEnterBackground:(UIApplication *)application { [self beingBa ...
- xamarin.android App在后台运行不退出
/// <summary> /// 重写按键事件 /// </summary> /// <param name="keyCode"></p ...
- iOS开发:后台运行以及保持程序在后台长时间运行
第一部分 1.先说说iOS 应用程序5个状态: 停止运行-应用程序已经终止,或者还未启动. 不活动-应用程序处于前台但不再接收事件(例如,用户在app处于活动时锁住了设备). 活动-app处于“使用中 ...
- 1014-31-首页12-显示weibo未读数--后台运行---定时器
/** * 当app进入后台时调用 */- (void)applicationDidEnterBackground:(UIApplication *)application{ /** ...
- APP长时间后台运行
* 参考:http://www.nivalxer.com/archives/187 首先,我要说明的是在iOS中,一般应用程序在后台挂起之后仅拥有3分钟时间来处理相应的未完成事件,但是3分钟之后就会 ...
随机推荐
- VK Cup 2017 - Round 1
和FallDream组队瞎打一通--B两个人写的都挂了233,最后只剩下FallDream写的A和我写的C,最后我yy了个E靠谱做法结果打挂了,结束之后改了改就A了,难受. AC:AC Rank:18 ...
- UVA 1451 Average
A DNA sequence consists of four letters, A, C, G, and T. The GC-ratio of a DNA sequence is the numbe ...
- [BZOJ]1095 Hide捉迷藏(ZJOI2007)
一道神题,两种神做法. Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特 ...
- Codeforces 666E Forensic Examination
题意:给定主串s和m个模式串,每次询问[l,r]的模式串中出现s[pl...pr]次数最多的串和次数. 这题挺简单的,先把所有模式串拿来建广义后缀自动机,询问相当于子树众数,用线段树合并即可. 那我为 ...
- c# &sqlserver
sqlserver CHARINDEX函數返回字符或者字符串在另一個字符串中的起始位置 eg: select bh,left(djxl,CHARINDEX('A',djxl)) as ,sum(rs) ...
- Struts中的找不到StringUtils异常
今天在Struts2框架下使用JSON插件时,程序保存找不到类org/apache/commons/lang/xwork/StringUtils,我纳闷了,commons-lang-2.5.jar和c ...
- CRM客户关系管理系统(二)
第三章.前端页面设计 3.1.前端页面布局 Bootstrap模板下载 (1)静态文件 新建statics目录(存放css/fonts/imgs/js/plugins) settings配置 STA ...
- Lock锁子类了解一下
前言 回顾前面: 多线程三分钟就可以入个门了! Thread源码剖析 多线程基础必要知识点!看了学习多线程事半功倍 Java锁机制了解一下 AQS简简单单过一遍 只有光头才能变强! 上一篇已经将Loc ...
- python实现编写windows服务
使用python编写windows服务 最近测试服务器上经常发生磁盘空间不足,每次手动清除比较麻烦,所以写个windows服务定时清理下.中间也遇到过几个坑,一起记录下来. 1.python实现win ...
- electron应用以管理员权限启动
最近在用electron开发PC桌面应用,其中有个需求就是整个应用以管理员权限启动.很头痛,各种google,baidu. 最后终于解决了,可以分为三个步骤,做个总结分享. 一.如果没有manifes ...