节省手机电力消耗 推特将通知进行分级

2023-11-11 22:40

本文主要是介绍节省手机电力消耗 推特将通知进行分级,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

应用程序的通知推送可以让使用者实时收到重要的讯息,但Google提到,这是一个常被忽略,却常会消耗许多电力的原因,像是高优先等级的通知,可以将手机从瞌睡省电模式(Doze mode)唤醒,并且从网络撷取推送通知的数据,而这个动作很容易把手机的电量榨干。

推特认为,电池寿命属于行动用户体验重要的一部分,因此一直以来,他们尽力的降低应用程序对用户手机电池电力的影响,而在推送通知功能上也做出了改变。在今年推特将通知讯息函式库从Google云端推送(GCM)迁移到了Firebase云端推送(FCM),由于FCM提供更多的功能,让推特可以掌握电力信息,也可以使用getPriority()以及getOriginalPriority()这类API,监控FCM的讯息优先度是否遭到系统降级。

推特的后端也会将通知设定,配置为适当的优先等级,以确保高优先等级的FCM讯息,仅用于产生使用者真正想要快速看见的通知,推特表示,他们发送的通知只有一小部分设置为高优先等级。而在Android 9(Pie版)才加入的应用程序等待桶(App Standby Buckets),会根据应用程序所属的存储桶,对接收高优先等级的讯息数量加以限制,因此高优先等级的讯息应该留在更有可能与使用者产生互动的通知,任意使用于不需要用户互操作的讯息,一旦应用程序耗尽应用程序等待桶中的配额,后续真正紧急的讯息将会被降级成一般等级,在装置进入瞌睡省电模式被延迟。

推特为确保讯息传送的质量,收集了应用程序传送与交付讯息的时间,对通知优先度进行统计分析。虽然推特应用程序在2%的装置中,被分配在应用程序等待桶中的频繁(Frequent)或是更低等级的桶中,但是没有任何通知讯息被降级,另外,当推特后端传送高优先等级FCM讯息时,推特在86%的装置的应用程序等待桶被分配到了活跃(Active)等级,推特提到,这代表他们对于讯息优先等级分配与用户习惯一致。

而推特也提到,预先提取资料是一种流行的做法,可以增加使用者在收到通知之后的体验,但这个技术必须要在通知的有效酬载(Payload)加入一段元数据,当发送通知时,应用程序利用有效酬载数据启动网络呼叫,以在显示通知之前,下载更多的资料。

FCM有效酬载有最大4KB限制,当需要更多数据来产生丰富的通知时,需要使用数据预先提取技术。但这项技术有其缺点,除了会延迟通知推送外,也会增加装置耗电量。推特将这样的通知数量降到1%以下,并在无可避免的情况下,使用JobScheduler或WorkManager对任务进行调度,以避免后台执行限制问题。

Android在Oreo版本之后,加入了通知频道(Notification Channels)功能,在考虑用户体验与节能的情况下,推特的Android版应用程序有9个通知频道,其中只有直接讯息传递、紧急情况和安全性被设计为高重要程度,大多数的频道重要性设置为低以减少干扰。

开发者可以透过谨慎的处理通知推送、限制预先提取以及设计通知频道来改善应用程序的耗电量,藉以延长用户装置的续航力。
文章转自:一起胜博发

转载于:https://my.oschina.net/u/3885866/blog/2989464

这篇关于节省手机电力消耗 推特将通知进行分级的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/393295

相关文章

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

如何使用Lombok进行spring 注入

《如何使用Lombok进行spring注入》本文介绍如何用Lombok简化Spring注入,推荐优先使用setter注入,通过注解自动生成getter/setter及构造器,减少冗余代码,提升开发效... Lombok为了开发环境简化代码,好处不用多说。spring 注入方式为2种,构造器注入和setter

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景