app进入后台通知 swift

2019-01-07 14:15:27 u011146511 阅读数 1870
 //注册进入前台的通知
        NotificationCenter.default.addObserver(self, selector:#selector(becomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
        //注册进入后台的通知
        NotificationCenter.default.addObserver(self, selector:#selector(becomeDeath), name: UIApplication.willResignActiveNotification, object: nil)
       
  
   
   
    //必须要加@objc-----进入前台
    @objc  func becomeActive(noti:Notification){
        
        print("进入前台")
    }
    //必须要加@objc----进后台
    @objc  func becomeDeath(noti:Notification){
        
        print("进入后台")
    }
    

 

2016-07-05 17:58:48 Emperor_huanzi 阅读数 2140
 NSNotificationCenter.defaultCenter().addObserver(self, selector: "becomeActive", name: UIApplicationDidBecomeActiveNotification, object: nil)
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "becomeDeath", name: UIApplicationWillResignActiveNotification, object: nil)

2017-03-22 17:11:06 ZitionChan 阅读数 1900

自己用swift 写了个计时器,每当app切换后台的时候软件就会暂停,若自己申请后台,则由苹果管理,无法准确计时。

我搜索网上的文章,获得了解决方法。以下是我的解决过程


实现方法:

1.用Notification注册通知

可写在ViewDidLoad里面,我写在了isCounting的计算型属性里面,当停止计时时,清除事件监听,开始计时时注册监听

//监测进入后台
NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackground), name: Notification.Name.UIApplicationDidEnterBackground, object: nil)
        
//监测程序被激活
NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActive), name: Notification.Name.UIApplicationDidBecomeActive, object: nil)


2.自建函数保存进入后台时的时间,当程序重新激活的时候,获取上次进入后台的时间,进行比较

此函数是在上面的监听事件中调用的

func didenterBackground(){
        timedata.saveCurrentTime()
    }
    
    func didBecomeActive(){
        timedata.loadLastRunTime()
    }

//以下是我写在我的timedata里面的

通过UserDefaults.standard进行保存,重新进入程序时用key获取上次进入后台的时间

func saveCurrentTime(){ //保存进入后台的时间
        let stopRunTime = Date()
        UserDefaults.standard.set(stopRunTime, forKey: "stopRunTime")
    
    }
    
    func loadLastRunTime(){//加载上次进入后台的时间
        let lastRunTime = UserDefaults.standard.object(forKey: "stopRunTime")
        if lastRunTime != nil{
            let stopRunTime = lastRunTime as! Date
            let different = stopRunTime.timeIntervalSince(Date()) //计算出上次与当前时间的时间间隔
        }
    
    }


3.更新数据即可




2016-07-15 15:14:42 walkerwqp 阅读数 850

 //添加本地通知

    func  addLocalNotification() {

        

        //定义本地通知对象

        let notification : UILocalNotification = UILocalNotification()

        

        //设置调用时间

        notification.fireDate = NSDate.init(timeIntervalSinceNow: 1800.0)//通知触发的时间,10s以后


        

        notification.repeatInterval = NSCalendarUnit.init(rawValue: 2) //通知重复次数

        

        //设置通知属性

        notification.alertBody = "您是否有未结束的乘车备案记录,记得结束备案哟!"  //通知主体

        

        //应用程序图标右上角显示的消息数

        notification.applicationIconBadgeNumber = 1

        

        //通过点击通知打开应用时的启动图片,这里使用程序启动图片

        notification.alertLaunchImage = "Default"

        

        //通知声音(需要真机才能听到声音)

        notification.soundName = "msg.caf"

        

         //调用通知

        UIApplication.sharedApplication().scheduleLocalNotification(notification)

        

    }

    

    //移除本地通知,在不需要此通知时记得移除

    

    func removeNotification() {

        

        UIApplication.sharedApplication().cancelAllLocalNotifications()

        

        

    }

    

只需要调用即可
2018-08-24 03:12:21 weixin_34228662 阅读数 436

使用 NSNotificationCenter通知中心来完成此功能。

APP在进入后台时会调用AppDelegateapplicationDidEnterBackground方法。

所以只要在此方法中通知viewController即可。

所以首先在viewController中的viewWillAppear中添加一个观察者

-(void) viewWillAppear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillEnterBackgroundNotification) name:@"enterBackground" object:nil];
}
复制代码

然后在 AppDelegateapplicationDidEnterBackground方法中通知这个观察者。

- (void)applicationDidEnterBackground:(UIApplication *)application {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"enterBackground" object:nil];
}
复制代码

注意~~

为了防止enterBackground被调用两次,我们需要在 viewWillDisappear中移除观察者

-(void) viewWillDisappear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"enterBackground" object:nil];
}
复制代码

原文 www.shiqidu.com/d/468