NSTimer后台运行并弹出提示

来源:互联网 发布:美图都有什么软件 编辑:程序博客网 时间:2024/05/18 01:29
1.后台加入NSTimer
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    /*
     Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
     If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
     */
    UIApplication *app = [UIApplication sharedApplication];
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^
              {
              [app endBackgroundTask:bgTask];
              bgTask = UIBackgroundTaskInvalid;    
              }];
    //Start the long-running task and return immediately.
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // Do the work associated with the task, preferably in chunks.
        _testTimer = [NSTimer scheduledTimerWithTimeInterval:5.0f target:self selector:@selector(getSomeTest) userInfo:nil repeats:YES];
        [_testTimer fire];
        [[NSRunLoop currentRunLoop] addTimer:_testTimer forMode:NSRunLoopCommonModes];
        [[NSRunLoop currentRunLoop] run];
        
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    });
}
2.切换到前台停用NSTimer
- (void)applicationWillEnterForeground:(UIApplication *)application
{
    if(_testTimer) {
        if([_testTimer isValid]) {
            [_testTimer invalidate];
        }
    }
    /*
     Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
     */
}



3.
- (void)localNotificationTest
{
    Class cls = NSClassFromString(@"UILocalNotification");
    UIApplicationState state = [[UIApplication sharedApplication] applicationState];
    if(state == UIApplicationStateActive)
        {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:[NSString stringWithFormat:@"您附近新有%d条活动正在进行", 20] delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
        [alert show];
        [alert release];
        }
    else 
        {
        NSLog(@"localNotificationTest");
        UILocalNotification *notif = [[UILocalNotification alloc] init];
        notif.fireDate = [NSDate date];
        notif.timeZone = [NSTimeZone localTimeZone];
        notif.alertBody= [NSString stringWithFormat:@"您附近新有%d条活动正在进行", 20];
        notif.alertAction = @"显示";
        notif.soundName= UILocalNotificationDefaultSoundName;
        notif.applicationIconBadgeNumber = ([UIApplication sharedApplication].applicationIconBadgeNumber + 1);
        notif.userInfo = [NSDictionary dictionaryWithObject:notif.alertBody forKey:@"kActivityNearByTotal"];
        [[UIApplication sharedApplication] scheduleLocalNotification:notif];
        [notif release];
        }
}
0 0
原创粉丝点击