如何禁止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;
   
   
  • 1

我们希望在输入一些字符,当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;}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

如果你想要保存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];}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

如果你想要保存某个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];}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

现在你运行App,输入一些字符然后关闭App.当你再次运行该App时你会发现View界面中的文本框会显示之前输入的字符串:

这里写图片描述

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/qq_43678568/article/details/87292076
今日推荐