zoukankan      html  css  js  c++  java
  • 【iOS】Instruments性能检测之耗电优化

      耗电优化最终目的:通过尽可能降低CPU、GPU功耗来降低手机电量消耗。

      (1)尽可能少用定时器;

      (2)优化I/O操作(所谓的I/O操作也就是文件操作,我们简称为I/O操作。怎么优化呢?尽量不要频繁写入小数据,最好批量一次性写入。读写大量主要的数据时,考虑用dispatch_io,其提供了基于GCD的异步操作文件I/O的API。用dispatch_io系统会优化磁盘访问);

      (3)数据量比较大的,建议使用数据库(SQlite、CoreData);

      影响耗电的几个方面:

      (1)Network : 网络活动会唤起需要长时间周期性供电的无线电模组,可以分批次进行网络请求,来降低开销.

      (2)Location :精密&高频的的定位会增加开销,需要按需使用.

      (3)CPU :CPU使用率超过20%就会快速耗干电池电量.高效使用CPU,并且当用户出现模糊输入时快速做出不做事情的反应.  

      (4)GPU :图形处理器(显卡的处理器),乱使用GPU会导致交互差,并且降低电池寿命.  

      (5)Background : 后台状态App仍会消耗电量,App要按需执行后台操作,并使用延迟APIs来保证系统运算高效执行.另外,在app进入后台状态是,立即减少动作,并且通知系统一次这些动作已经完成.

      1、网络优化

      (1)网络不可用,不要尝试执行网络请求;

    func AlamofiremonitorNet() {
     let manager = NetworkReachabilityManager(host: "www.apple.com")
        manager?.listener = { status in
            print("网络状态: (status)")
            if status == .reachable(.ethernetOrWiFi) { //WIFI
                print("wifi")
            } else if status == .reachable(.wwan) { // 蜂窝网络
                print("4G")
            } else if status == .notReachable { // 无网络
                print("无网络")
            } else { // 其他
                
            }
            
        }
        manager?.startListening()//开始监听网络
       }

      (2)让用户可以取消长时间运行或者速度很慢的网络操作,设置合适的超时时间

    var timeoutSessionManager1:Alamofire.SessionManager = {
         let configuration = URLSessionConfiguration.default
         //请求超时时间15秒
         configuration.timeoutIntervalForRequest = 15
         return Alamofire.SessionManager(configuration: configuration)
     }()

      (3)如果多次请求的结果相同,尽量使用缓存。

      (4)尽量使用断点续传,否则网络不稳定的时候可能多次传输相同的内容。

      2、定位优化

      (1)如果不是导航的应用,尽量不要实时更新位置,定位完毕就关掉定位服务;

      (2)尽量降低定位精度,比如尽量不要使用精度最高的KCLLocationAccuracyBest;精度越高,硬件模块功耗越大;

      (3)对于用不到定位的,info.plist文件中不要有定位权限的相关字段。

      以上就是笔者自己优化时候,修改的地方。

  • 相关阅读:
    FreeIPA部署及基本使用
    第7天:Django模板使用与表单
    第6天:数据库配置与模型
    第5天:基于类的视图与中间件
    linux下修改MySQL表名与表的字符编码
    webService理解(一)
    查询MySQL库下所有表名,数据为空的表名
    linux中MySQL连接找不到mysql.sock文件
    初步书写Webservice项目,运行后报错:Cannot assign requested address: bind
    linux配置jdk,MySQL环境
  • 原文地址:https://www.cnblogs.com/xjf125/p/13098814.html
Copyright © 2011-2022 走看看