耗电优化最终目的:经过尽量下降CPU、GPU功耗来下降手机电量消耗。数据库
(1)尽量少用定时器;缓存
(2)优化I/O操做(所谓的I/O操做也就是文件操做,咱们简称为I/O操做。怎么优化呢?尽可能不要频繁写入小数据,最好批量一次性写入。读写大量主要的数据时,考虑用dispatch_io,其提供了基于GCD的异步操做文件I/O的API。用dispatch_io系统会优化磁盘访问);网络
(3)数据量比较大的,建议使用数据库(SQlite、CoreData);app
影响耗电的几个方面:异步
(1)Network :
网络活动会唤起须要长时间周期性供电的无线电模组,能够分批次进行网络请求,来下降开销.优化
(2)Location :
精密&高频的的定位会增长开销,须要按需使用.spa
(3)CPU :
CPU使用率超过20%就会快速耗干电池电量.高效使用CPU,而且当用户出现模糊输入时快速作出不作事情的反应. code
(4)GPU :
图形处理器(显卡的处理器),乱使用GPU会致使交互差,而且下降电池寿命. blog
(5)Background :
后台状态App仍会消耗电量,App要按需执行后台操做,并使用延迟APIs来保证系统运算高效执行.另外,在app进入后台状态是,当即减小动做,而且通知系统一次这些动做已经完成.rem
一、网络优化
(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)尽可能使用断点续传,不然网络不稳定的时候可能屡次传输相同的内容。
二、定位优化
(1)若是不是导航的应用,尽可能不要实时更新位置,定位完毕就关掉定位服务;
(2)尽可能下降定位精度,好比尽可能不要使用精度最高的KCLLocationAccuracyBest;精度越高,硬件模块功耗越大;
(3)对于用不到定位的,info.plist文件中不要有定位权限的相关字段。
以上就是笔者本身优化时候,修改的地方。