iOS 官方文档翻译iOS文档翻译iOS官方文档

App Programming Guide for iOS -&

2017-06-20  本文已影响20人  raingu24

当在后台时引起用户注意

通知是一种应用被挂起、或在后台运行、或没有运行的情况下引起用户注意的方式。应用可以使用本地通知来显示警告、播放声音、印章化应用的图标、或者三者的组合。例如,一个闹钟应用可以使用本地通知来播放闹钟声音并显示一个警告来关掉闹钟。当一个通知被传递给用户的时候,用户必须根据信息决定是否让应用回到前台。(如果应用已经运行在前台,本地通知只会安静的传递给应用而不会显示给用户。)

为了安排本地通知的传递,创建一个UILocalNotification类的实例,配置通知参数,并使用UIApplication类的方法来安排它。本地通知对象包含关于用来传递的通知类型(声音、警告、或者徽章)的信息以及发送它的时间(当合适时)。UIApplication类的方法为立刻或在安排的时间传递通知提供了选项。

代码清单3-2显示了一个使用用户设定的日期和时间安排一个单次警告的例子。这个例子只配置了一次警告,并在安排一个新的警告之前取消了之前的警告。(你自己的应用可以在任何时刻有不超过128个的本地通知,其中任何一个都可以配置为以指定间隔重复。)警告本身由一个警告框和一个声音文件组成;当警告触发时,如果应用在不运行或者在后台运行的时候,声音文件会播放。如果应用正处于活动状态,因此正在前台运行,作为替代,应用委托的application:didReceiveLocalNotification:方法被调用

代码清单3-2 安排警告通知

- (void)scheduleAlarmForDate:(NSDate*)theDate

{

    UIApplication* app = [UIApplication sharedApplication];

    NSArray*    oldNotifications = [app scheduledLocalNotifications];

 

    // Clear out the old notification before scheduling a new one.

    if ([oldNotifications count] > 0)

        [app cancelAllLocalNotifications];

 

    // Create a new notification.

    UILocalNotification* alarm = [[UILocalNotification alloc] init];

    if (alarm)

    {

        alarm.fireDate = theDate;

        alarm.timeZone = [NSTimeZone defaultTimeZone];

        alarm.repeatInterval = 0;

        alarm.soundName = @"alarmsound.caf";

        alarm.alertBody = @"Time to wake up!";

 

        [app scheduleLocalNotification:alarm];

    }

}

用于本地通知的声音文件和用于推送通知的声音文件具有相同的要求。自定义的声音文件必须被放置在应用的主束中,并且支持下面格式中的一种:Linear PCM, MA4, µ-Law, 或 a-Law。你也可以指定UILocalNotificationDefaultSoundName常量来为设备播放默认的声音。当这个通知被发送且声音被播放时,系统也会在支持震动的设备上触发震动。

你可以使用UIApplication类的方法来取消安排通知,或者得到通知的列表。更多关于这些方法的信息,参见UIApplication Class Reference。关于配置本地通知的额外信息,参见Local and Remote Notification Programming Guide。

理解你的应用何时在后台启动

支持后台执行的应用可以通过系统重启来处理传入的事件。如果应用由于除用户强退之外的原因而被终止,系统会在下面这些事件发生的时候重启应用:

在大多数情况下,系统会不在用户强退应用后重启应用。一个例外是位置应用,在iOS 8及更新的版本中,它能在用户强退之后被重启。然而在其它情况下,用户必须明确启动应用或在应用能被系统从后台自动启动之前重启设备。当设备启用密码保护时,系统在用户首次解锁设备之前无法从后台启动应用。

做一个负责任的后台应用

在使用系统资源和硬件时,前台应用总是优先于后台应用。运行在后台的应用需要为这种差异做好准备,并在它们运行在后台的时候调整其行为。具体来说,应用在进入到后台的时候应该遵循下面的指导:

如果你正在后台执行一个音频应用,或者允许在后台运行的其他类型应用,应用可以照常的响应传入消息。换句话说,系统可能会在发生低内存警告的时候通知应用。在这种情况下系统需要终止应用来释放更多的内存,该应用会调用它的applicationWillTerminate:委托方法来执行退出前的最后任务。

选择不在后台执行

如果你不想让应用在后台执行,你可以通过将UIApplicationExitsOnSuspend键(值为YES)添加到在Info.plist 文件来明确的选择不进入后台。当应用选择不进入时,应用会在不运行、非活动、以及活动状态之间循环,而不会进入到后台或者挂起状态。当应用按下Home按钮退出应用的时候,applicationWillTerminate:方法会被调用,并且在应用终止并进入不运行状态之前,有大约5秒钟的时间来清理及退出。

强烈不推荐选择不进入后台执行,但是在某些特定情况下可能是首选。具体来说,如果为后台执行的编码增加了应用很大的复杂性,终止应用或许是一个更简便的方案。此外,如果你的应用消耗大量的内存并且无法轻松释放它,系统会迅速的杀死你的应用来为其他应用腾出空间。因此,选择终止,而不是切换到后台,可能会产生相同的结果,并节省开发的时间和精力。

更过关于能包含到Info.plist文件中的键的信息,参见Information Property List Key Reference。

(本节结束)

上一篇 下一篇

猜你喜欢

热点阅读