我即将在2017.7.8号开一个直播讲堂,感兴趣的同学点击快来参加吧:https://segmentfault.com/l/15...
内容包括:

  1. Android 知识体系分享

  2. 从入门到提高的学习路径

  3. 如何进一步突破瓶颈,进一步提升

  4. 充足的时间和大家讨论,回答大家问题

自我介绍:

网易 Android 专家工程师,网易云音乐 Android 负责人,主导从零开发了网易云音乐 Android
客户端,目前是杭州研究院专业委员会成员,负责每年的评级,规范起草,面试招聘等相关工作。参与并制作了网易云课堂 Android
微专业相关课程,反响不错。

说起通知栏,是一块各个应用的必争之地,不显示通知栏就意味着没有存在感,通知栏显示得不靠前还得想方设法提前。加上OnGoing的通知还能提升进程优先级,大有被滥用的趋势。为了保活,虽然没啥必要也得起个通知。甚至还有一些不显示通知的前台Service黑科技广为流传,可以参考这里。厂家和开发者的战斗越演欲烈,到现在即使OnGoing的Service放后台也照杀不误,真是可怜了我们这群做音乐的。于是后台应用保护白名单,下拉锁定,手机管家,省电模式,神隐模式等等用于限制后台运行的功能越来越多,可想应用怎么斗得过系统?

还好Android上面有一键清除所有通知,否则现在一个App要出N个通知的情况要吐血。每一条新闻要出个通知,一天要通知好多次。自己保活不了不算,还要别人拉起来帮忙通知(后台startService起另外一个程序的用法也被比如华为系统限制)。我们在抱怨后台越来越被限制的同时,也要思考自己软件是否做到了尽量少骚扰用户。

通知栏的开发每个人心中都会有些伤痛。主要有以下几点:

通知栏没有显示
通知栏不更新
点击没反应
通知栏上面内容看不清
通知栏的样式长得跟其他不一样,自己的独树一帜很突兀

事实上从Android的历史版本来看,通知栏这个设计也是被改过了非常多次,不仅仅是样式,还有各种功能改动,包括最新的O版本。为了保证更好的兼容性,我们建议:
1.遵循通知的设计的初衷

    Communication from other usersWell-timed and informative task reminders

如官方所描述,通知用于和他人交流或者是有用任务提醒。所以在考虑是否使用通知的时候思考你的通知是否属于上述两类。是否用户一天到晚都需要关心你的通知,你的通知对于用户价值是咋样的。你的所有东西都往上面丢也意味着别人可能也这么做,两败俱伤。

  1. 通知栏不显示

高版本的原生系统自带通知栏显示管理功能,默认是允许显示。但像oppo系统却默认不允许显示。 和厂家沟通是为了减少对用户的影响。这种粗暴的管理方式甚至连音乐App也无法幸免。国内默认白名单的估计也就是QQ和微信了。对于这种特权App待遇处理又无奈又愤怒。我们能做的只能是检测手机然后做引导提醒。

3.通知栏不更新

同样发现在oppo,vivo手机上面,可能是出于性能考虑限制了更新频率,通知发送太快可能会被忽略,这样偶尔会导致通知栏不更新。这种情况可能在音乐App上容易出现,更新信息同时需要更新图片。我们能做的就是故意做点延迟,目前经验值是200ms。

4.点击没反应

除了代码bug,厂家这边的问题有发现在华为部分系统上面,因为对通知栏进行了修改增加了第一次显示通知时同时显示是否允许按钮,怀疑这个修改导致了bug,用户即使点了允许显示了通知,也无法对通知上面的按钮进行操作,直到下一次通知刷新才正常。

5.通知上面的内容看不清,通知样式长得跟其他通知不一样

这个问题是因为使用了RemoteView来实现自定义通知。原生系统其实提供了很多style,但往往需求的实现是复杂的。不可避免的在使用自定义通知的时候我们可能有几种方法尽量增加兼容性:

5.1 不要使用自定义背景,显示了指定一个颜色意味着你就很特殊,很大几率跟别人长得不一样。而且即使是给RemoteView设置background,据我们经验仍然在有些机器上面不起作用,很可能厂家考虑到了这个问题直接忽略掉了背景。当然指定背景也能解决一部分文字看不清问题,但这个方案不怎么推荐

5.2 通过起一个通知来获取文字颜色,原生系统提供了三行文字,对于文字样式不多的情况可以尝试这种方法,但据我们之前尝试也还是存在获取颜色失败等兼容问题,相关代码类似这样,来源这里

5.3 读取系统通知的style来设置文字样式,style高低版本上面有所区别:

Title字体@android:style/TextAppearance.StatusBar.EventContent.Title
Content字体@android:style/TextAppearance.StatusBar.EventContentTitle字体@android:style/TextAppearance.Material.Notification.Title
Content字体@android:style/TextAppearance.Material.Notification.Line2

云音乐目前采用的就是这个方案,但也会有坑,直到某一天厂家来反馈说我们修改了系统通知栏底色,但忘记修改上面提到的style了。。。最终云音乐使用了这个方案结合修改通知栏底色,不过修改底色是放在设置里面作为一个用户选项。

5.4 没什么特殊情况,请尽量使用系统通知Style。这种兼容性肯定是最好的,事实上随着Android这些版本的升级,加入了越来越多的模板能够满足了绝大部分的需求。如果你还是遇到需要自定义的情况,要么是开发没想到可以用系统模板,要么就是视觉交互不满意原生样式。是时候拿出上面这些理由了。

接下来我想聊一聊通知栏的跳转设计。

通知的点击代码很简单,调用setOnClickPendingIntent设置下就可以了。但往往业务逻辑没有那么简单,有些页面打开是需要登录的,程序还没任何页面启动话需要看一次广告等必须要解决前置一些条件。或者程序运行中task里面的root activity必须是我们的首页。这种情况其实比较常见,因为我们很不想加的退出应用功能最好的方式就是通过Intent的FLAG_ACTIVITY_CLEAR_TOP来实现的。清理掉root activty上面的所有activity之后再finish自己。这种实现就要求root activity比较固定。

所以最好设计一个跳转协议,如果页面还未启动则走正常启动流程,页面已经启动了则直接打开目标页面,大概代码可能是这样,这是RedirectActivity里onCreate的代码:

以上经验来自我的团队,感谢我的团队。如果有遇到问题可以留言和我们讨论。

如果感兴趣,请关注微信公众号:anzhuozhimei

Android我还可以相信你多少系列文章三之通知栏相关推荐

  1. android 通知栏多少钱,Android我还能够相信你多少系列文章三之通知栏

    提及通知栏,是一块各个应用的必争之地,不显示通知栏就意味着没有存在感,通知栏显示得不靠前还得千方百计提早.加上OnGoing的通知还能提高进程优先级,大有被滥用的趋势.为了保活,虽然没啥必要也得起个通 ...

  2. Janus系列文章三 API使用指南 VideoRoom创建新的视频房

    Janus系列文章三 API使用指南 VideoRoom API Janus API 通讯协议分类 Janus API 的会话和事务机制 事务 会话 Janus API 使用流程 使用videoroo ...

  3. .net 面试题系列文章三(附答案)

    2019独角兽企业重金招聘Python工程师标准>>> 选择题 11.接口是一种引用类型,在接口中可以声明(A),但不可以声明公有的域或私有的成员变量. a)方法.属性.索引器和事件 ...

  4. C#强化系列文章三:实验分析C#中三种计时器使用异同点

    C#中提供了三种类型的计时器: 1.基于 Windows 的标准计时器(System.Windows.Forms.Timer) 2.基于服务器的计时器(System.Timers.Timer) 3.线 ...

  5. 微设计(www.weidesigner.com)介绍系列文章(三)

    微设计(www.weidesigner.com)是一个专门针对微信公众账号提供营销推广服务而打造的第三方平台. 3.1 优惠券 优惠券是用于微信上与顾客互动的一种营销方式,不仅能够展现自己的产品,更能 ...

  6. Android视频录制从不入门到入门系列教程(一)————简介

    一.WHY Android SDK提供了MediaRecorder帮助开发者进行视频的录制,不过这个类很鸡肋,实际项目中应该很少用到它,最大的原因我觉得莫过于其输出的视频分辨率太有限了,满足不了项目的 ...

  7. 云原生存储系列文章(一):云原生应用的基石

    作者| 郡宝 阿里云技术专家 参与文末留言互动,即有机会获得赠书福利! 导读:存储服务支撑了应用的状态.数据的持久化,是计算机系统中的重要组成部分,也是所有应用得以运行的基础,其重要性不言而喻.在存储 ...

  8. 【计算机基础系列文章(一)】计算机简介

    什么是计算机 计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能.是能够按照程序运行,自动.高速处理海量数据的现代化智能 ...

  9. 【微信小程序开发•系列文章一】入门

    本系统文章主要有以下几篇: <[微信小程序开发•系列文章一]入门> <[微信小程序开发•系列文章二]视图层> <[微信小程序开发•系列文章三]数据层> <[微 ...

最新文章

  1. DeepMind发布最新原始音频波形深度生成模型WaveNet,将为TTS带来无数可能
  2. 土地一分用计算机怎么算,一分地等于多少平方米怎么算
  3. pythonurllib模块-python爬虫之urllib模块和requests模块学习
  4. Mono+Nginx环境
  5. 入手你从来没有接触过的行业项目
  6. 【牛客 - 157B】凤凰(树上并查集,dfs)
  7. cloud一分钟 | 李飞飞离任谷歌云,工作重心将重新转回学术界
  8. SQLAlchemy 教程 —— 基础入门篇
  9. 在同一局域网内的同一工作组内登陆其中的机器时显示输入网络密码对话框
  10. cassandra入门
  11. Linux配置jdk
  12. addLoadEvent方法解析
  13. 000 初步使用Kotlin开发Android应用
  14. 怀旧在2022:游戏ROM下载+游戏模拟器推荐(安卓/iOS)
  15. 百度搜索中url的参数解析
  16. py文件转换成exe格式
  17. 论文笔记:SAITS: SELF-ATTENTION-BASED IMPUTATION FOR TIMESERIES
  18. 视觉基础:关于机器视觉、机器学习及人工智能领域
  19. SVG描边动画实现过程
  20. Kubernetes Ingress and Services 故障排查

热门文章

  1. 别说什么“寒门再难出贵子”,屌丝逆袭从来都是极少数
  2. 在音乐世界中的感悟:人生,朋友和音乐
  3. 如何破解区块链应用落地难题
  4. 你需要提供管理员权限才能删除文件夹
  5. office2013零售版转vol版
  6. ICASSP2023录用率有可靠度还不错的消息了
  7. string数组转int数组
  8. 四川智汇蓝图科技有限公司的四大网络防火墙技术
  9. 绿茶小说内容站群(解密开源版)
  10. cocos2d-x商业级单机游戏和网络游戏开发系列