美文网首页
iOS杀死程序后数据上报

iOS杀死程序后数据上报

作者: 小王在努力 | 来源:发表于2020-10-26 09:55 被阅读0次

1、前言

杀死进程 ,网络请求调用如果是在子线程.这个时候RunLoop循环已经结束,此时网络请求进行到一半就会停止,所以不会回调回来。
这是时候我们只需要在主线程做网络请求,难后sleep2秒。服务器就可以正常下发数据

2、代码实现

func applicationWillTerminate(_ application: UIApplication) {

        print("applicationWillTerminate")

        let path : URL = URL.init(string: "[https://api.zhuishushenqi.com/cats/lv2/statistics](https://api.zhuishushenqi.com/cats/lv2/statistics)")!

        let conifg : URLSessionConfiguration = URLSessionConfiguration.default;

        let session : URLSession = URLSession.init(configuration: conifg);

        var request = URLRequest.init(url: path)

        request.timeoutInterval = 10;

        request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField:"Content-Type")

        request.addValue("chrome", forHTTPHeaderField:"User-Agent")

        let task : URLSessionDataTask = session.dataTask(with: request) { (data, respond, error) in

            let json = JSON(data as Any)

            print(json)

        }

        task.resume();

        sleep(2)

        print("=================")

        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.

    }

3、用户切后台在杀死程序这时候我们改怎么做
程序进入后台后,如果内存不足被系统杀死或者手动杀死,都不会调用 applicationWillTerminate
解决方法:可以在程序进入后台时,添加一后台运行通知函数,也就是程序进入后台一段时间内,程序还在运行,并可以响应一些消息。

    func applicationDidEnterBackground(_ application: UIApplication) {

        print("applicationDidEnterBackground")

        UIApplication.shared.beginBackgroundTask {

        }

    }

    func applicationWillTerminate(_ application: UIApplication) {

        print("applicationWillTerminate")

        let path : URL = URL.init(string: "[https://api.zhuishushenqi.com/cats/lv2/statistics](https://api.zhuishushenqi.com/cats/lv2/statistics)")!

        let conifg : URLSessionConfiguration = URLSessionConfiguration.default;

        let session : URLSession = URLSession.init(configuration: conifg);

        var request = URLRequest.init(url: path)

        request.timeoutInterval = 10;

        request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField:"Content-Type")

        request.addValue("chrome", forHTTPHeaderField:"User-Agent")

        let task : URLSessionDataTask = session.dataTask(with: request) { (data, respond, error) in

            let json = JSON(data as Any)

            print(json)

        }

        task.resume();

        sleep(2)

    }

相关文章

  • iOS杀死程序后数据上报

    1、前言 2、代码实现 3、用户切后台在杀死程序这时候我们改怎么做程序进入后台后,如果内存不足被系统杀死或者手动杀...

  • 日志上报系统Kafka消息队列优化实践(上)

    背景 接入方需在小程序中集成错误收集SDK,SDK采集到错误后需上报数据,为保证数据的实时更新,平台接收到数据后需...

  • Android/iOS开源数据上报组件

    Android/iOS开源数据实时上报组件 移动平台数据上报是很常见的需求。常见的实现方式是, 1. 创建一个带队...

  • iOS App Groups

    iOS学习笔记-APP之间数据共享空间_APPGroup iOS应用程序间共享数据

  • IOS 本地化存储的实现方式(Swift)

    简介 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据。由于iOS程序默...

  • iOS数据上报模块封装方案

    由于我们的业务越来越重,并且对于数据的要求也越来越高,所以在业务代码中需要嵌入大量的数据上报代码,而且大部分还都是...

  • iOS数据持久化小结

    持久化就是把数据保存在硬盘上而不是内存里,程序重启后数据不会消失。iOS中数据持久化方法有:plist文件(属性列...

  • iOS数据存储

    iOS数据存储 持久化存储 概述: 持久化存储——将数据保存在硬盘里,当应用程序重启后可以访问到之前存储的数据。是...

  • iOS杀死程序后调用网络请求和数据库操作

    项目中碰到一个需求,就是在退出控制器后进行埋点操作,正常情况我们在controller的delloc中执行埋点的网...

  • iOS 数据持久化 (数据存储)

    数据持久化,就是将数据保存在硬盘中;当应用程序结束或者机器重启后,依然能使用之前保存的数据。在iOS上的数据存储,...

网友评论

      本文标题:iOS杀死程序后数据上报

      本文链接:https://www.haomeiwen.com/subject/wnfbmktx.html