iOS开发高手课
戴铭
前滴滴出行技术专家
立即订阅
11464 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 锚定一个点,然后在这个点上深耕
免费
基础篇 (20讲)
01 | 建立你自己的iOS开发知识体系
02 | App 启动速度怎么做优化与监控?
03 | Auto Layout 是怎么进行自动布局的,性能如何?
04 | 项目大了人员多了,架构怎么设计更合理?
05 | 链接器:符号是怎么绑定到地址上的?
06 | App 如何通过注入动态库的方式实现极速编译调试?
07 | Clang、Infer 和 OCLint ,我们应该使用谁来做静态分析?
08 | 如何利用 Clang 为 App 提质?
09 | 无侵入的埋点方案如何实现?
10 | 包大小:如何从资源和代码层面实现全方位瘦身?
11 | 热点问题答疑(一):基础模块问题答疑
12 | iOS 崩溃千奇百怪,如何全面监控?
13 | 如何利用 RunLoop 原理去监控卡顿?
14 | 临近 OOM,如何获取详细内存分配信息,分析内存问题?
15 | 日志监控:怎样获取 App 中的全量日志?
16 | 性能监控:衡量 App 质量的那把尺
17 | 远超你想象的多线程的那些坑
18 | 怎么减少 App 电量消耗?
19 | 热点问题答疑(二):基础模块问题答疑
20 | iOS开发的最佳学习路径是什么?
应用开发篇 (12讲)
21 | 除了 Cocoa,iOS还可以用哪些 GUI 框架开发?
22 | 细说 iOS 响应式框架变迁,哪些思想可以为我所用?
23 | 如何构造酷炫的物理效果和过场动画效果?
24 | A/B 测试:验证决策效果的利器
25 | 怎样构建底层的发布和订阅事件总线?
26 | 如何提高 JSON 解析的性能?
27 | 如何用 Flexbox 思路开发?跟自动布局比,Flexbox 好在哪?
28 | 怎么应对各种富文本表现需求?
29 | 如何在 iOS 中进行面向测试驱动开发和面向行为驱动开发?
30 | 如何制定一套适合自己团队的 iOS 编码规范?
31 | iOS 开发学习资料和书单推荐
32 | 热点问题答疑(三)
原理篇 (6讲)
33 | iOS 系统内核 XNU:App 如何加载?
34 | iOS 黑魔法 Runtime Method Swizzling 背后的原理
35 | libffi:动态调用和定义 C 函数
36 | iOS 是怎么管理内存的?
37 | 如何编写 Clang 插件?
38 | 热点问题答疑(四)
原生与前端共舞 (5讲)
39 | 打通前端与原生的桥梁:JavaScriptCore 能干哪些事情?
40 | React Native、Flutter 等,这些跨端方案怎么选?
41 | 原生布局转到前端布局,开发思路有哪些转变?
42 | iOS原生、大前端和Flutter分别是怎么渲染的?
43 | 剖析使 App 具有动态化和热更新能力的方案
用户故事 (1讲)
用户故事 | 我是如何学习这个专栏的?
结束语 (1讲)
结束语 | 慢几步,深几度
iOS开发高手课
登录|注册

18 | 怎么减少 App 电量消耗?

戴铭 2019-04-20
你好,我是戴铭。
手机设备电量有限,App 开发时如不注意电量的的消耗,当用户发现你的 App 是耗电大户时,就会毫不犹豫地将其抛弃。所以,每次开发完,我们都需要去检查自己的 App 有没有耗电的问题。
耗电的原因有千万种,如果每次遇到耗电过多的问题,我们都从头查找一番的话,那必然会效率低下。
就比如说,测试同学过来跟你说“某个页面的前一个版本还好好的,这个版本的耗电怎么多了那么多”,那么你首先想到可能就是这个页面有没有开启定位,网络请求是不是频繁,亦或是定时任务时间是不是间隔过小。接下来,你会去查找耗电问题到底是怎么引起的。你去翻代码的时候却发现,这个页面的相关功能在好几个版本中都没改过了。
那么,到底是什么原因使得这一个版本的耗电量突然增加呢?不如就使用排除法吧,你把功能一个个都注释掉,却发现耗电量还是没有减少。这时,你应该怎么办呢?接下来,我就在今天的文章里面和你详细分享一下这个问题的解法吧。
我们首先需要明确的是,只有获取到电量,才能够发现电量问题。所以,我就先从如何获取电量和你讲起。

如何获取电量?

在 iOS 中,IOKit framework 是专门用于跟硬件或内核服务通信的。所以,我们可以通过 IOKit framework 来获取硬件信息,进而获取到电量消耗信息。在使用 IOKit framework 时,你需要:
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《iOS开发高手课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(16)

  • 泽七
    获取电量为什么不用 [[UIDevice currentDevice] batteryLevel] 呢?
    2019-04-20
    28
  • 包罗万象
    iokit已经无法导入了,请问老师这种情况你是怎们处理的?
    2019-05-10
    5
  • cp_kong
    IOKit Frameworks 目前在iOS项目中无法导入了,要自己新建一个mac项目,然后从那个项目导入,再拷到iOS项目中
    2019-05-15
    1
    3
  • Geek_f0b40f
    IOKit framework 是Mac 的框架?参考的这个吗?https://blog.csdn.net/uxyheaven/article/details/38167509
    2019-04-23
    1
  • 星辰
    老师你好,IOKit中拿到的电池电量与UIDevice中获取到的电池电量相比谁的精度更高呢
    2019-11-20
  • 繁星mind
    电量优化 https://www.jianshu.com/p/bd2c1ce5c02a
    2019-11-19
  • Alexander
    获取电量的for循环直接return了。
    2019-06-12
  • 月落泉
    smStackOfThread这个方法哪有啊

    作者回复: https://github.com/ming1016/GCDFetchFeed
    GCDFetchFeed/GCDFetchFeed/GCDFetchFeed/Lib/SMLagMonitor/SMCallStack.m

    2019-05-10
  • do .利军
    Stack of thread: 771:
    CPU used: 34.0 percent
    user time: 542025 second
    libsystem_kernel.dylib 0x111e6617a mach_msg_trap + 10
    libsystem_kernel.dylib 0x111e696a2 thread_get_state + 421
    Stock 0x102e35f7e smStackOfThread + 878
    Stock 0x102f0fea8 +[SMCPUMonitor updateCPU] + 296
    Stock 0x1038d097f -[AppDelegate updateCPUInfo] + 47
    Foundation 0x10bd2a135 __NSFireTimer + 83
    CoreFoundation 0x10a8613e4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
    CoreFoundation 0x10a860ff2 __CFRunLoopDoTimer + 1026
    CoreFoundation 0x10a86085a __CFRunLoopDoTimers + 266
    CoreFoundation 0x10a85aefc __CFRunLoopRun + 2220
    CoreFoundation 0x10a85a302 CFRunLoopRunSpecific + 626
    GraphicsServices 0x1127d52fe GSEventRunModal + 65
    UIKitCore 0x11b5dfba2 UIApplicationMain + 140
    Stock 0x103ff37d0 main + 112
    libdyld.dylib 0x111b48541 start + 1

    我检测到的信息如上,+后边的数字是什么意思呢?数值越=大,表示占用越多?
    2019-04-30
  • 好饿早知道送外卖了
    QOS_CLASS_UTILITY指定block的Qos,是不是和设置队列优先级效果一样?

    作者回复: 是的

    2019-04-30
  • 孤独的码者
    iOS需要强制导入IOKit框架吗
    2019-04-28
  • Calabash_Boy
    获取电量方法里,为什么循环里有个return呢?那就没有必要写循环了吧
    2019-04-25
  • 赫小僧
    请教个问题, dispatch_block_create_with_qos_class 这种方式创建出的队列进行复杂计算的时候对电量有优化. 相关信息可以去哪查看呢?

    2019-04-23
  • 孙启超
    请问老师一个问题,下面这段代码如何在断点时插入到有问题的方法中:
    thread_act_array_t threads;
    mach_msg_type_number_t threadCount = 0;
    const task_t thisTask = mach_task_self();
    kern_return_t kr = task_threads(thisTask, &threads, &threadCount);
    2019-04-22
  • Ant
    受教了
    2019-04-21
  • 黄昏
    cpu使用量确实是耗电的重大原因。不合理的动画可能导致cpu暴涨,电量损耗巨大。
    2019-04-20
收起评论
16
返回
顶部