我希望在我的应用终止时向用户显示(本地)通知,无论是iOS本身还是用户通过任务切换器。
当iOS因内存压力而杀死应用程序时,applicationWillTerminate
上会调用AppDelegate
函数,因此我可以在这种情况下安排本地通知。
但是,当用户通过在应用程序切换器中将其滑动到顶部来杀死应用程序时,不会调用applicationWillTerminate
功能(如Apple文档中所述,以及SO上的各种答案)。 然而,在这种情况下,有些应用程序仍能成功向用户显示(本地)通知(特别是健身追踪应用程序,例如Human),要求用户重新启动应用程序跟踪可以继续。
我可以想到一些(大多数是尴尬的,或者至少是消耗电池的)方法来完成这项工作,但是否有一种向用户显示此类通知的好方法?特别是在应用程序被用户杀死后几乎立即这样做,这排除了很多可能的解决方法,在后台每隔n秒安排和取消本地通知......
答案 0 :(得分:1)
发现它......显然,显示通知的应用程序就像我要显示的那样通过使用后台位置更新(重新)安排本地通知来实现它,因此它永远不会显示,并且一旦它们被杀死用户通知保持活动并触发。
听起来不太好,但除了定期从服务器ping应用程序之外,它可能是唯一的方法。
有一种更体面(和节能)的方式来做这件事会很好,例如通过在应用程序终止之前始终有时间做某事,无论终止的原因。
答案 1 :(得分:0)
我试过这样:
在didFinishLaunchingWithOptions
中添加此代码:
[self addLocalNotification];
[NSTimer scheduledTimerWithTimeInterval:9.0f
target:self
selector:@selector(addLocalNotification)
userInfo:nil
repeats:YES];
在addLocalNotification
- (void) addLocalNotification{
NSDate * theDate = [[NSDate date] dateByAddingTimeInterval:10]; // set a localnotificaiton for 10 seconds
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.alertBody =@"App must run" ;
[app scheduleLocalNotification:alarm];
}}
它对我有用。只要app run / background,addLocalNotification
就会运行。一旦终止已经安排,本地通知将按时触发。我们可以根据自己的兴趣改变时间间隔。