如何禁止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界面中的文本框会显示之前输入的字符串:

这里写图片描述

相关文章
|
JavaScript Android开发
Cordova 后台运行 Android APP
在 Vue 项目中的主页(Home.vue)设置返回键,点击返回后 APP 自动后台运行,在 Home.vue created() 中设置回退按钮监听事件。
|
Android开发
利用ActivityLifecycleCallbacks判断APP是否在后台运行
在开发的时候,我们时常有这样一个需求:判断APP是否在后台运行? 常见的方式是这样的: 或者是这样的: 如上的这两种方式都可以满足我们的需求 。
1266 0
|
1月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
84 3
|
1月前
|
Android开发 开发者 UED
个人开发 App 成功上架手机应用市场的关键步骤
个人开发 App 成功上架手机应用市场的关键步骤
|
1月前
|
开发工具 数据安全/隐私保护 Android开发
【教程】APP 开发后如何上架?
【教程】APP 开发后如何上架?
|
1月前
|
API
uni-app 146朋友圈列表api开发
uni-app 146朋友圈列表api开发
18 0
|
1月前
|
Java Android开发 开发者
【Uniapp开发】APP的真机调试指南,从开发到上架全过程
【Uniapp开发】APP的真机调试指南,从开发到上架全过程
36 3
游戏直播APP平台开发多少钱成本:定制与成品源码差距这么大
开发一款游戏直播APP平台所需的费用是多少?对于计划投身这一领域的投资者来说,首要关心的问题之一就是。本文将探讨两种主要的开发模式——定制开发与成品源码二次开发的成本差异及其优劣势。
|
1月前
|
开发框架 移动开发 JavaScript
SpringCloud微服务实战——搭建企业级开发框架(四十六):【移动开发】整合uni-app搭建移动端快速开发框架-环境搭建
正如优秀的软件设计一样,uni-app把一些移动端常用的功能做成了独立的服务或者插件,我们在使用的时候只需要选择使用即可。但是在使用这些服务或者插件时一定要区分其提供的各种服务和插件的使用场景,例如其提供的【uni-starter快速开发项目模版】几乎集成了移动端所需的所有基础功能,使用非常方便,但是其许可协议只允许对接其uniCloud的JS开发服务端,不允许对接自己的php、java等其他后台系统。
140 2