开发者社区> 大熊猫侯佩> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

如何禁止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开发,如何保证消息可靠、高效的送达
13 0
浅谈量化合约对冲系统APP开发方案
浅谈量化合约对冲系统APP开发方案
10 0
Android App开发超实用实例 | ​Broadcast
介绍Broadcast的静态注册、动态注册及有序广播。 Broadcast(广播)分为发送者和接收者,可实现跨应用的消息传递。重启手机、闹钟、来电、接收短信等都会发出广播,通过BroadcastReceiver就可以接收广播并进行相应处理。
22 0
Android开发:获取安卓App版本号的方法步骤
在Android开发过程中,想要开发一个完整功能的App,各个地方的内容都要涉及到,比如获取App的系统版本号就是必须要有的功能。Android的App版本号相关内容比iOS的App版本号内容要多,而且iOS版的App版本信息跟Android的还不一样。本篇文章就来介绍一下Android开发中获取App版本号的方法步骤,方便以后使用。获取App版本号常用的有两个方法,这两种方式都能获取到系统版本号,请根据实际需求或者偏好来选择任何一种方法即可。
80 0
Android 天气APP(一)开发准备
Android 天气APP(一)开发准备
31 0
APICloud AVM框架 开发视频会议APP
1.创建会议,确认会议时间、参会人员、会议主题、确定会议主持人(默认为发起人)可开启会议;同时会通过应用消息和短信通知参会人员。2.加入会议,可通过会议大厅找的会议列表直接加入,也可通过输入会议编号加入会议;加入会议的前提是会议已在进行中。3.快速会议,可直接确认会议人员然后发起实时视频会议,参会人员实时接收应用消息或短信,快速进入会议。3.历史会议,分为我主持的会议、我参与的会议。4.会议大厅,列表显示今天需要参加的会议。
31 0
语音聊天app开发,对用户更具吸引力的设计
语音聊天app开发,对用户更具吸引力的设计
32 0
小白从0到1学习app开发,以APICloud为例
小白如何开发APP,需要学习哪些知识?可以从0到1完成一个APP的开发。本文以以APICloud(www.apicloud.com)为例,介绍如何开发一个APP。
59 0
使用APICloud开发app的性能提升实践
为什么说这个问题?首先我是一名前端开发者,使用过的开发方式有,APICloud、原生开发、自己混合打包开发。这些都是根据不同的业务需求,用不同的开发方式,有的只需要安卓开发的需求,有需要安卓和iOS开发的需求,还有一些要h5和安卓等等。根据这些就做了相应的研究。
97 0
手机app定制开发的优势
随着智能手机的普及和企业个性化需求的不断增加,现在越来越多的企业都选择通过定制形式完成手机app开发
92 0
+关注
大熊猫侯佩
贪吃贪睡的大熊猫侯佩
文章
问答
文章排行榜
最热
最新
相关电子书
更多
使用TensorFlow搭建智能开发系统自劢生成App UI代码
立即下载
移动 App 性能监测实践(iOS篇)
立即下载
APP加固新方向-混淆和瘦身
立即下载