当前位置: 首页 > news >正文

官网优化包括什么内容无锡网站建设优化

官网优化包括什么内容,无锡网站建设优化,网上写作平台有哪些,广州网站建设网站推广文章目录 首先Apple官方为我们准备了三类后台任务执行的场景:Background TasksBackground Downloading或者Uploading(后台下载或者上传)Background Long-Running Tasks 声明后台服务类型Playing and Recording Background AudioTracking the User’s LocationImplementing a Vo… 文章目录 首先Apple官方为我们准备了三类后台任务执行的场景:Background TasksBackground Downloading或者Uploading(后台下载或者上传)Background Long-Running Tasks 声明后台服务类型Playing and Recording Background AudioTracking the User’s LocationImplementing a VoIP AppDownloading Newsstand Content in the BackgroundCommunicating with an External AccessoryCommunicating with a Bluetooth AccessoryFetching Small Amounts of Content OpportunisticallyUsing Push Notifications to Initiate a Download 哪些情况系统会唤醒挂起进程做一个尽责的后台APP 首先Apple官方为我们准备了三类后台任务执行的场景: 1.Background TasksAPP 在前台时启动某项任务然后在未结束之前突然 切换到了后台那么 APP 可以在切换回调里使用某些 API 来继续向系统请求一些时间来继续完成这个任务完成之后通知系统之后系统会将 APP 挂起 2.Downloading/Uploading在后台启动从网络下载/上传文件的任务 – 对于文件下载/上传iOS 有专门的机制 3.Specific Backgournd Tasks应用需要在后台一直执行代码 Background Tasks Apple 文档建议如果要启动一个后台任务异步任务可以使用 API beginBackgroundTaskWithExpirationHandler来指定即使启动任务的时候程序是处在前台的也没有关系当位于前台时该方法请求得到的时间是DBL_MAX也就是 double数据类型最大值你可以认为是无限大当任务执行过程中 APP 被切换到后台时任务还没有完成这个时间又会自动调整为一个时间片段具体多少我没找到文档说明都是说可以通过backgroundTimeRemaining属性得到。需要注意的是 这个方法是成对使用的对于一个固定 task 每次调用beginBackgroundTaskWithExpirationHandler都会产生一个token 值(UIBackgroundTaskIdentifier实际是个整型)必须在任务执行结束时调用 endBackgroundTask 并传递这个token来结束后台任务。另外作为最佳实践都应该传递一个 超时 handler以防申请到的时间片段内还是没能完成任务的话做最后的清理和标注工作如果不传的话那么结果就是 iOS 直接 kill 掉你的APP闪退. 下面是一段代码例子 // 在某处定义一个 token 变量 UIBackgroundTaskIdentifier _bgTaskToken;// 进入后台 委派方法回调 - (void)applicationDidEnterBackground:(UIApplication *)application {_bgTaskToken [application beginBackgroundTaskWithName:MyTask expirationHandler:^{// 时间到了任务还没完成只能清理...// 取消后台任务[application endBackgroundTask:_bgTaskToken];_bgTaskToken UIBackgroundTaskInvalid;}];// 异步启动任务这样不会阻塞 本委派方法回调dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{// 巴拉巴拉做自己的任务...// 任务在时间限制内结束啦取消后台任务 [application endBackgroundTask:_bgTaskToken];_bgTaskToken UIBackgroundTaskInvalid;}); }ios13新增了一个API模块:BackgroundTasks可以更轻松的管理后台任务,该框架区分了两大类背景任务 应用程序刷新任务短命的任务使应用程序一整天都保持最新。 背景处理任务:用于执行可推迟的维护任务的长期任务 详细的API可参考BackGround Tasks 下面是一段代码例子 class AppDelegate: UIResponder, UIApplicationDelegate {var window: UIWindow?private let server: Server MockServer()func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) - Bool {let feedVC (window?.rootViewController as? UINavigationController)?.viewControllers.first as? FeedTableViewControllerfeedVC?.server serverPersistentContainer.shared.loadInitialData()// MARK: Registering Launch Handlers for TasksBGTaskScheduler.shared.register(forTaskWithIdentifier: com.example.apple-samplecode.ColorFeed.refresh, using: nil) { task in// Downcast the parameter to an app refresh task as this identifier is used for a refresh request.self.handleAppRefresh(task: task as! BGAppRefreshTask)}BGTaskScheduler.shared.register(forTaskWithIdentifier: com.example.apple-samplecode.ColorFeed.db_cleaning, using: nil) { task in// Downcast the parameter to a processing task as this identifier is used for a processing request.self.handleDatabaseCleaning(task: task as! BGProcessingTask)}return true}func applicationDidEnterBackground(_ application: UIApplication) {scheduleAppRefresh()scheduleDatabaseCleaningIfNeeded()}// MARK: - Scheduling Tasksfunc scheduleAppRefresh() {let request BGAppRefreshTaskRequest(identifier: com.example.apple-samplecode.ColorFeed.refresh)request.earliestBeginDate Date(timeIntervalSinceNow: 15 * 60) // Fetch no earlier than 15 minutes from nowdo {try BGTaskScheduler.shared.submit(request)} catch {print(Could not schedule app refresh: \(error))}}func scheduleDatabaseCleaningIfNeeded() {let lastCleanDate PersistentContainer.shared.lastCleaned ?? .distantPastlet now Date()let oneWeek TimeInterval(7 * 24 * 60 * 60)// Clean the database at most once per week.guard now (lastCleanDate oneWeek) else { return }let request BGProcessingTaskRequest(identifier: com.example.apple-samplecode.ColorFeed.db_cleaning)request.requiresNetworkConnectivity falserequest.requiresExternalPower truedo {try BGTaskScheduler.shared.submit(request)} catch {print(Could not schedule database cleaning: \(error))}}// MARK: - Handling Launch for Tasks// Fetch the latest feed entries from server.func handleAppRefresh(task: BGAppRefreshTask) {scheduleAppRefresh()let queue OperationQueue()queue.maxConcurrentOperationCount 1let context PersistentContainer.shared.newBackgroundContext()let operations Operations.getOperationsToFetchLatestEntries(using: context, server: server)let lastOperation operations.last!task.expirationHandler {// After all operations are cancelled, the completion block below is called to set the task to complete.queue.cancelAllOperations()}lastOperation.completionBlock {task.setTaskCompleted(success: !lastOperation.isCancelled)}queue.addOperations(operations, waitUntilFinished: false)}// Delete feed entries older than one day.func handleDatabaseCleaning(task: BGProcessingTask) {let queue OperationQueue()queue.maxConcurrentOperationCount 1let context PersistentContainer.shared.newBackgroundContext()let predicate NSPredicate(format: timestamp %, NSDate(timeIntervalSinceNow: -24 * 60 * 60))let cleanDatabaseOperation DeleteFeedEntriesOperation(context: context, predicate: predicate)task.expirationHandler {// After all operations are cancelled, the completion block below is called to set the task to complete.queue.cancelAllOperations()}cleanDatabaseOperation.completionBlock {let success !cleanDatabaseOperation.isCancelledif success {// Update the last clean date to the current time.PersistentContainer.shared.lastCleaned Date()}task.setTaskCompleted(success: success)}queue.addOperation(cleanDatabaseOperation)} }Background Downloading或者Uploading(后台下载或者上传) 这类后台任务必须使用 iOS 指定的机制才可以那就是 NSURLSession。使用 NSURLSession 建立的下载任务会被系统直接在另外一个独立的系统进程里进行管理不会因 APP 进入后台或挂起等而受到影响iOS 会统一管理所有的下载任务。并且即使你的 APP 已经挂掉啦下载任务还是会继续等到下载完成啦系统会唤起你的 APP 进程并通知你但如果是用户主动杀掉的你的进程那么系统会自动取消下载任务。 具体使用方法 使用 NSURLSessionConfiguration 类的 backgroundSessionConfigurationWithIdentifier 方法创建一个 NSURLSessionConfiguration 对象参数为一个字符串作为一个token 完成时会用到不能为空或 nil 设置上一步创建出的对象的 sessionSendsLaunchEvents 属性为 YES(属性解释:当后台会话中的任务完成时允许在后台恢复 或启动应用程序 或需要验证时。这只适用于使用backgroundSessionConfigurationWithIdentifier创建的配置:默认值是YES。) 如果开启下载任务时是位于前台的将 discretionary 属性也设置为 YES(这个属性允是许根据系统的判断来调度后台任务以获得最佳性能) 设置你需要的其他属性值 使用配置好的 NSURLSessionConfiguration 对象作为参数创建 NSURLSession 实例对象 6使用 NSURLSession 开始下载task之后就是调用下载或上传Task代理方法,代理方法可以看 《URL Session Programming Guide》 如果在下载完成之前你的APP已经挂起或者死掉啦那么当系统完成下载之后系统会唤醒你的 APP并回调 你的 app 委托方法 application:handleEventsForBackgroundURLSession:completionHandler:在这其中参数会传进来一个 token这个就是你第一步里 传入的 字符串使用这个 字符串再重新创建一个 NSURLSessionConfiguration并进行与开始任务之前一样的配置那么就可以使用这些对象来获取已经完成的任务的详细情况了。当后台下载或者上传任务完成之后会通过URLSessionDidFinishEventsForBackgroundURLSession这个代理方法来通知我们. Background Long-Running Tasks 在 iOS 里只有特定的一些应用类型才会被允许可以在后台一直运行APP 必须显式的声明一些特定权限才可以在后台进行长时间运行而不被挂起。 一些应用类型有 6 种 需要在后台播放音频 – 如 Music Player需要在后台录音在后台时也需要不断通知用户位置变动的比如导航支持 VoIP 电话的 – 如 skype 网络电话需要在后台有规律的下载和处理网络内容的在后台有规律的从其他外设(第三方配件)获取并更新数据的 要实现这些类型服务的 APP需要进行专门的声明这样系统才会采取相应的操作。 先来看看怎么声明。 声明后台服务类型 通过 XCode 的 project setting 里就可以配置类型选择之后会自动 在你 工程的 Info.plist 文件里 增加 UIBackgroundModes 键值对一个 APP 可以同时声明多种支持的后台长期任务类型在 XCode 里勾选上即可 下表给出了所有 在 XCode 可选的 类型 及 具体含义 Xcode background modeUIBackgroundModes 值描述Audio and AirPlayaudio应用可以在后台播放或录制音频包括 Apple 自家的 AirPlay 流媒体音视频对于录制需要在APP 第一次运行时用户授予权限才可进行。Location updateslocationAPP 不断更新 GPS 位置信息并通知给用户即使 APP 处于后台Voice over IPvoipAPP 提供通过网络连接来打电话的功能Newsstand downloadsnewsstand-content杂志应用可以在后台下载杂志并处理External accessory communicationexternal-accessory一些外设控制 APP 比如一些控制 第三方 MFI 配件的应用声明这种 类型可以让APP 在后台不断的与 外设进行沟通Uses Bluetooth LE accessoriesbluetooth-centraliPhone 作为蓝牙中心设备使用也就是做为 server需要在后台不断更新蓝牙状态的Acts as a Bluetooth LE accessorybluetooth-peripheraliPhone 作为蓝牙外围设备使用也就是做 client需要在后台不断的访问其他蓝牙设备获取数据的Background fetchfetchAPP 需要在后台不断地 频繁有规律的从网络获取数据Remote notificationsremote-notificationAPP 先在后台关注某个 push 推送但这个 push 推送到达的时候及时在后台开始对应的下载任务以尽可能减少用户直接点开 通知 后 查看内容的等待时间 Playing and Recording Background Audio 一些典型的应用例子 音乐播放软件录音APP支持 AirPlay 音视频播放的APP网络通话软件 当你在 Info.plist 里声明了 UIBackgroundModes 为 audio 的时候在后台进行 audio 的相关操作时系统 audio API 会自动阻止系统将你的 APP 进程挂起所以不需要 APP 自己再进行其他额外的处理只需要处理自己的软件逻辑即可。 注意手机上是有可能会有多个 APP 同时拥有后台 audio 操作权限的这时候系统会根据 每个 APP 开始操作音频时的 audio session 配置来决定如何进行操作而且你应该非常小心的处理一些中断事件如来电其他系统提示音等这些都有相关的 API 和机制可以参考 《Audio Session Programming Guide》 Tracking the User’s Location 有三种方式来实现 位置的访问 The significant-change location service这也是官方推荐的方式Foreground-only location servicesBackground location services 前两种都不需要在 Info.plist 里声明 UIBackgroundModes 只有最后一种需要。 The significant-change location service 字面理解就是只有位置有变化时才会发出通知有人说这个时机是依据基站切换了基站时就会发出一次通知所以频率会受基站的密度影响所以市区更新频率会比郊区高。但好处 是这个服务不管你的 APP 是在前台还是后台不管是否已经被挂起或已经死掉了他都会唤醒你的进程进行相应处理所以应该是最省电的。 后两种都是标准的定位服务只不过一个只能工作在前台而一个可以在后台工作 注意官方对于使用后台定位服务的 APP 审核是非常严格的所以使用时一定要小心并提供足够的说明和解释。 至于如何实现一个定位 APP 请看 《Location and Maps Programming Guide 》 Implementing a VoIP App 网络通话软件skype 就是其中一个。VoIP应用能够使用户通过互联网拨打和接听电话而不是通过蜂窝移动网。VoIP应用严重依赖网络打VoIP电话导致高的能耗就不足为奇了。当VoIP应用处于不活跃的状态时不管怎样应用都应该彻底地空闲已到达省电的目的。 大致步骤 在 Info.plist 里进行UIBackgroundModes配置创建一个VoIP证书。配置VoIP推送通知。处理推送。 注意更多关于VoIP推送通知的信息具体实现请参考 PushKit Framework Reference Downloading Newsstand Content in the Background 杂志应用居然还有专门的处理。但我看介绍跟前面讲解的 后台下载文件没啥区别啊另外好像也是用 通知推送 触发啊。About Newsstand Kit Framework Communicating with an External Accessory 外设设备有很多比如一些心率监控器会在必要的时候向手机推送数据。声明了UIBackgroundModes 为 external-accessory 后系统就不会主动关闭 APP 与 外设之间的连接而是替 APP 监视这个连接当有数据过来时会唤醒 APP 进行处理每次唤醒 APP 只有 10 S 种时间进行数据处理所以应当越快越好万不得已如果10S不够需要使用 beginBackgroundTaskWithExpirationHandler: 方法再申请一段时间进行处理 【Note】Apple 要求此类应用 需要提供一个 开启 和 关闭 连接的界面供用户使用 Communicating with a Bluetooth Accessory 类似上一节的 配件如果心率监控器跟 手机之间使用的连接方式是蓝牙那么就一模一样啦连 唤醒的时间限制都一样都是 10 S Fetching Small Amounts of Content Opportunistically 有人依靠这种手段来实现后台永存但现在不好使啦除非你是真的每次都在下载东西而且每次时间都很短。用户的流量啊。因为声明了这个 mode 之后并不保证 系统一定会给你分配时间来执行后台任务因为它自己有一套逻辑如果你经常性唤醒但却每次都耗时很久又没有做从网络下载东西的操作那么以后你被分配给唤醒的几率就会越来越小。另外还有审核 正常情况下声明了这个类型之后系统在你的 APP 进入后台后会间隔性的给机会将你的 APP 唤醒并回调你的 委托方法application:performFetchWithCompletionHandler:你需要在这个回调里检查是否有新内容可用如果有就开启后台下载推荐使用 NSURLSession 来建立下载完成后你必须调用这个方法出入 的 completionHandler 并传入一个 整型值 来表示 你的处理是否正常UI是否已经更新让系统来决定更新 snapshot等 Using Push Notifications to Initiate a Download 这个方式是你的应用中包含通知功能时你在服务端推送的通知内容里加入 键值对 content-available 1 那么 手机收到这个通知后会自动启动 APP 到后台或 唤醒依旧保持后台执行并回调 委托方法 application:didReceiveRemoteNotification:fetchCompletionHandler: 在这个方法里进行内容下载。 【Note】需要服务端推送配合 哪些情况系统会唤醒挂起进程 当一些特定事件发生时系统会唤醒已经被挂起的进程转换到后台运行状态这些事件针对不同类型的APP 有所不同 location apps 系统产生了符合 APP 配置的定位要求的位置更新设备进入或离开了一个网络注册的区域你可以理解为基站 audio apps audio framework 需要 app 处理数据的时候–任何 播放、录制 Bluetooth apps 当手机扮演中心设备时收到了其他蓝牙设备发来的数据当手机扮演外围设备时收到了蓝牙服务端发来的数据 background download apps 本应用的一个包含 content-available 1 的推送通知到达了手机background fetch 类型系统给予了 APP 唤醒的机会使用 NSURLSession 进行后台下载的APP在下载过程完成或出现问题时系统会主动唤醒对应 APP杂志应用下载完成时唤醒 APP 提示绝大多数情况下系统不会重启被用户手动强制关闭的 APP但在 iOS 8 之后 location apps 是个例外。其他的所有被用户手动强制关闭的APP 都不会被系统主动唤起直到 用户再次 主动启动这个 APP或者手机重启并在用户输入了解锁密码之后才会恢复机制。 做一个尽责的后台APP Apple 教育我们如果你要实现一个后台 APP应该做一个有责任的APP不要乱搞。 不要在后台调用任何 OpenGL ES 接口在进入后台之前也要保证这些调用都已结束否则你的 APP 将直接被 kill取消所有 Bonjour 相关的操作还不清楚这个是啥东西不过 Apple 说即使你不取消它在把你挂起之前也会都给你取消如果有网络操作做好容错处理保存 APP 状态进入后台前持久化一些数据以便恢复尽可能多的释放内存尤其是强引用停止使用共享的系统资源比如 电话本日历等进入后台前release他们不要在后台进行 UI 的更新操作做好对外设配件的 连接 和断开 事件的响应这个是 外设编程的机制啦需要 参考 External Accessory Programming Topics 关闭弹出窗口和弹出菜单等移除窗口上的一些敏感信息在后台的执行尽可能小的任务
http://www.pierceye.com/news/603208/

相关文章:

  • 公司网站代码模板下载山东城建设计院网站
  • 茂港网站建设公司妇科医院网站建设怎么做
  • 怎么自己改自己做的网站的图片策划案网站
  • 养殖p2p网站建设网址大全浏览器下载
  • 建立网站的过程沈阳做网站直播的公司
  • 沈阳市网站设计公司大全电商毕业设计作品
  • 做网站怎么赚钱滑县电桂林两江四湖景区导游词
  • 加快门户网站建设文网站建设费用计入什么科目
  • 网站建设合同英文模板下载湖州做网站的公司
  • 网站内容页设计济南网站优化
  • 简洁中文网站模板下载军事新闻头条最新消息
  • 湘潭网站建设 诚信磐石网络开发app软件的步骤
  • 阿里云网站备案网站建设方案书私有云可以建设网站
  • 网站建设如何增加流量做杂志的网站有哪些
  • 可信网站认证有用建设网站什么语言
  • 福州网站建设 大公司wordpress顺序
  • 为什么网站开发要用架构个人主页网站制作教程
  • 东莞教育网站建设做网站工资还没有文员高
  • 郑州网站制作工作室国内网站开发
  • 现在什么网站做外贸的最好wordpress window系统
  • 柬埔寨网赌网站开发新网络营销
  • html5毕业设计作品苏州关键词优化排名推广
  • 网站建设包括的内容相册在线设计平台
  • 花生壳可做网站吗微商城开发用华网天下首选
  • 口岸地区网站建设内容塔里木油田公司档案馆网站建设研究
  • 网站备案属于公司哪一块石家庄最新状况
  • 秦州建设网站免费代刷网站推广
  • 怎么查看一个网站是用什么程序做的我的家乡湛江网站设计
  • 沈阳网页模板建站开发手机app多少钱
  • 全国建设注册中心网站网页设计师培训价格