3.5 在应用关闭后重启
在其他应用需要更多资源时, 后台的应用可能会被关闭.在这种情况下, 一旦发生位置变化,应用会被重启,因而需要重新初始化过程,若出现这种情况,application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法会受到键值为UIApplicationLaunchOptionsLocationKey的条目
如下代码: 在应用关闭后重新初始化
- (void)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 因缺乏资源而关闭应用后, 监测应用是否因为位置变化而被重启
if (launchOptions[UIApplicationLaunchOptionsLocationKey]) {
// 开启监测位置的变化
[self.manager startMonitoringSignificantLocationChanges];
}
}
四 屏幕
屏幕非常耗电, 屏幕越大就越耗电.当然,如果你的应用在前台运行且与用户进行交互,则势必会使用屏幕并消耗电量
这里仍然有一些方案可以优化屏幕的使用
4.1
当应用在前台时, 使用, 一旦应用进入了后台,则立即暂停.通常来说,你可以通过 UIApplicationWillResignActiveNotification或UIApplicationDIdEnterBackgroundNotification的通知事件来暂停或停止,也可以通过UIApplicationDidBecomeActiveNotification的通知事件来恢复
4.2 视频播放
我在上家公司就是做视频类App的,当时就采用了这个技术 保持屏幕常亮
在视频播放期间,最好保持屏幕常量.可以使用UIApplication对象的 idleTimerDisabled属性来实现这个目的.一旦设置了 YES, 他会阻止屏幕休眠,从而实现常亮.
与类似,你可以通过相应应用的通知来释放和获取锁
4.3 多屏幕
使用屏幕比休眠锁或暂停/恢复要复杂得多
如果正在播放电影或运行, 你可以将它们从设备的屏幕挪到外部屏幕,而只在设备的屏幕上保留最基本的设置,这样可以减少设备上的屏幕更新,进而延长电池寿命
处理这一场景的典型代码会涉及一下步骤

1 在启动期间监测屏幕的数量 如果屏幕数量大于1,则进行切换
2 屏幕在链接和断开时的通知. 如果有新的屏幕加入, 则进行切换. 如果所有的外部屏幕都被移除,则恢复到默认显示
@interface LLMultiScreenViewController ()
@property (nonatomic, strong)UIWindow *secondWindow;
@end
@implementation LLMultiScreenViewController
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[self updateScreens];
}
- (void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
[self disconnectFromScreen];
}
- (void)viewDidLoad {
[super viewDidLoad];
[self registerNotifications];
}
- (void)registerNotifications{
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(scrensChanged:) name:UIScreenDidConnectNotification object:nil];
}
- (void)scrensChanged:(NSNotification *)nofi{
[self updateScreens];
}
- (void)updateScreens{
NSArray *screens = [UIScreen screens];
if (screens.count > 1) {
UIScreen *secondScreen = [screens objectAtIndex:1];
CGRect rect =secondScreen.bounds;
if (self.secondWindow == nil) {
self.secondWindow = [[UIWindow alloc]initWithFrame:rect];
self.secondWindow.screen = secondScreen;
LLScreen2ViewController *svc = [[LLScreen2ViewController alloc]init];
svc.parent = self;
self.secondWindow.rootViewController = svc;
}
self.secondWindow.hidden = NO;
}else{
[self disconnectFromScreen];
}
}
- (void)disconnectFromScreen{
if (self.secondWindow != nil) {
// 断开连接并释放内存
self.secondWindow.rootViewController = nil;
self.secondWindow.hidden = YES;
self.secondWindow = nil;
}
}
- (void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-76047-4.html
咱也不想炒股
看好你
打不赢