1、网络优化
1.1 网络(获取数据的过程)
- DNS解析:域名=========IP
- 协议:Socket/长连接/Http协议
- DNS解析缺陷:Hook、公网的路由。运营商的劫持
- DNS解析用的 UDP 53
- HttpDNS:http-自己回去做整理
- HttpDNS:缺点?TCP和UDP的区别。TCP更慢,时延高。怎么解决协议层的缺陷。
- 直连IP:设置header 设置host字段 直接改成ip地址
1.2 阿里云DNS的SDK
设计一款高性能的HttpDNS需要考虑哪些点?重要
- 最优的IP地址(延时低)+ 缓存的处理+容灾(自己挂了找运营商的)
- 如何解决延时的问题?
缓存命中,缓存查询后的结果 ---》映射8.8.8.8做成hashmap键值对存到对象里边
异步解析httpdns
(不太重要)还可以做懒加载,用到时候再去处理?
图差不多这个意思,并不完整
缓存更新的策略
缓存时间 120s~300s之间 缓存的更新:
- 网络切换
- 过期(过期时间的查询用最小堆啥是最小堆?或者优先级排序,lfu)
异步请求
retry
性能优化有哪些可以先用到项目当中
启动优化,电池和网络,APM框架。改简历 回去 好好看看代码。
做ttl优化,什么是ttl?
gzip压缩
网络通信机制 及数据传输协议。这里要搞懂
socket,私有化协议的定制
2、电量
2.1电量优化
- 减少:减少网络请求,用缓存
- 推迟:推迟不是立马需要的操作。不要立即操作的 wifi下或者充电下
- 合并:合并多个接口请求 部分接口是否可以合为一个
2.2、Doze低电耗模式
- 在低电耗模式下,您的应用会受到以下限制:
- 暂停访问网络
- 系统忽略PowerManageWakeLock唤醒锁定。
- 标准 AlarmManager 闹钟 (包括 setExact() 和 setwindow()) 推迟到下一个维护期。
- 如果需要设置在设备处于低电耗模式时触发的闹钟,请使用API23(6.0)提供的setAndAllowWhileIdle()(一次性闹钟,同set方法或 setExactAndAllowWhileIdle() (比set置的精度更高,同setExact)
- 使用 setAlarmclock() 设置的闹钟将继续正常触发,系统会在这些闹钟触发之前不久退出低电0式。
- 系统不执行WLAN扫描
- 系统不允许运行同步适配器AbstractThreadedSyncAdapter(账号同步拉活).
- 系统不允许运行 Jobscheduler 。
2.3、standby待机模式
- 应用待机模式允许系统判定应用在用户未主动使用它时是否处于待机状态。当用户有一段时间未触摸应用并没有以下表现,则Android系统就会使应用进入空闲状态
- 应用当前有一个进程在前台运行(作为活动或前台服务,或者正在由其他活动或前台服务使用)应用生成用户可在锁定屏幕或通知栏中看到的通知。
- 当用户将设备插入电源时,系统会从待机状态释放应用,允许它们自由访问网络并执行任何待处理的作业和如果设备长时间处于闲置状态,系统将允许闲置应用访问网络,频率大约每天一次。
2.4、Dzone和standby的区别
Doze地电耗模式主要通过延迟后台应用的CPU和网络操作、而standby主要是通过暂停应用进程和活动来减少消耗
2.5、workmanager
相当于是条件执行,将某非必须任务放到某种条件西下执行,比如充电时执行,低电量不执行。
2.6、WakeLock
- 处理器 AP+BP
- AP:AMR架构处理器 linux+android 用户界面和应用程序app开发。application processor
- BP:(baseband processor):射频通信RTOS
- WakeLock:(锁机制)
- WakeLockAP 可以保证任务在灭屏的时候可以正确的被执行。API能让应用成功控制AP是否休眠。
- 所以我可以用API让它正常执行。
2.6.1、怎么做呢?
第一步 引入wake-lock的权限 第二步 lock的acquire 和release 第三步
bugreport 中可以看weaklock的申请情况,申请频繁就会有耗电的问题。
2.6.2、一旦发现耗电多,用workmanager做。
日志上传最好的也是在workmanager上做。
2.6.3、bugreport
adb bugreport bugreport.zip