下面这个页面就是我们进入APP后的主界面。客户选项的红点上数字就是显示我们没有查看的客户总数量。

当我们切换到客户这个fragment时,会显示贷款客户数量与保险客户数量。

当我们随便点击入一个选项,假如进入到保险客户的这个activity里面,ListView显示用户的信息,上面标记红点,代表没有没有查看的客户,没有红点的代表已经查看过的客户数量。

当我们点击一个有红点的客户信息的时候,需要向后端发送信息,代表我已经查看了这条信息。并且改变在主Activity的数量,和frament中的数量。如下图:

那么这个功能怎么实现以及怎么优化,我在实现这个功能的时候,经历的三个阶段。
第一种阶段:
思路:利用SharedPrefrence,和广播。
具体实现:当我们进入主Activity的时候,从后台读取数据得到客户总数量,保险客户总数量,贷款客户总数量,并把它存储到sharedPrefrence里面。再将主Activity读取SharedPrefrence客户总数量并显现出来。
当我们切换到frament的时候,从SharedPrefrence依次读取贷款和保险用户的数量,并且把它呈现出来。
当我们点击带有ListView中带有红点item的时候,改变SharedPrefrence中的客户数量和保险客户的数量,发送广播,通知改变。主Activity和fragment再从SharedPrefrence中对数据读取一次,然后发生改变。

我们发现,这个过程中所有操作都要使用到SharedPrefrence,而且代码全部写在各种Activity中,显得代码臃肿,代码没有复用性,没有逻辑。于是演化了第二种思路。

第二种阶段
思路:利用静态的数据拥有与应用的同样的生命周期,舍弃了SharedPrefrence。
具体实现:创建一个类,在类中设定3个静态整型,分别为客户总数量,保险客户数量,贷款客户数量。在这个类中分别写入三个方法。分别为根据客户数量判断红点方法,根据保险客户数量红点方法,根据贷款客户数量红点方法。
当我们进入主Activity的时候,将得到的数据分别存入3个静态数量。然后在主Activity中调用根据客户数量判断红点。
当我们进入fragment的时候,分别调用根据保险客户数量红点方法,根据贷款客户数量红点方法。判断保险客户和贷款客户红点显示的情况。
当我们点击ListView上显示有红点的item的时候,改变静态的客户总数量,保险客户数量,贷款客户数量。发送广播给主Activity和Fragment。然后在主Activity调用根据客户数量判断红点的方法;在fragment中调用根据贷款数量判断红点方法或根据保险客户数量判断红点方法。
第二种思路提高的代码的复用,并且利用的一个中心类控制所有操作,舍弃了对SharadPrefrence的频繁使用,根据我的测试,还能提高红点显示的速度。

第三种阶段
思路:不要广播,利用fragment的生命的周期和Activity的生命周期。
具体实现:
在第二种思路上扩展,继续使用一个中心类控制所有操作。
当我们点击ListView中的带有红点item的时候。只改变相应红点的数量,而不发送广播。而是在fragment使用在onCreatView()方法和Activity中onResume()方法中调用判断红点显示情况的方法。
我们知道,当我们从fragment的跳转时,会执行Fragmeng中的onDestroyView()方法,切换回fragment的时候,会执行onCreatView()方法。
跳转Activity的时候会执行onStop()方法,跳回的时候会执行onResume()方法。
第三种思路彻底利用生命周期,舍弃了广播的使用和简化的代码。

在整过过程的我们发现,一个好的思路是在你做项目的过程中慢慢得出来的,不是我们一步得到的。我们首先要用自己最能想到的方法实现这个功能再说,在这个基础之上,在对代码进行优化尤其在开发实际项目是,速度第一,性能第二。最好的策略就是快速完成项目,然后快速迭代,优化性能和代码。

APP之红点提醒三个阶段相关推荐

  1. 仿微信透明度渐变且带红点提醒的底部栏

    微信主页面慢慢水平滑动时,会发现底部栏的图标以及文字有透明度渐变效果.其中,透明度的大小依赖ViewPager的Offset系数.从当前页面切换到下一个页面,当前页面的底部栏颜色会逐渐变淡,而下一个页 ...

  2. 谷歌滤镜软件叫什么_谷歌app爆红的拍照功能:你最像名画中的谁?

    原标题:谷歌app爆红的拍照功能:你最像名画中的谁? 谷歌一个名叫艺术文化的app是世界上最大的线上博物馆.虽然这个app2016年就已经有了,不过直到最近才爆红,原因是开发人员在其中添加了一个有趣的 ...

  3. 市面上仅此一本的 App 安全“红宝书”,终于来了!

    2014 年初,移动互联网产业快速发展,App 井喷式爆发,绝大多数使用的是 Android 系统.但是那时候大多数的开发者没有做好 App 的安全防护措施,面对移动互联网黑灰产的攻击,App 基本上 ...

  4. Android Studio中app出现红叉的解决方案

    Android Studio中app出现红叉的解决方案 如果你在网上搜索了一大圈之后发现还是没有解决你的问题,或许这篇文章能帮到你,同事的开发环境中遇到了,处理了一下午,期间包括删除工具,重装sdk等 ...

  5. android studio app叉号,Android Studio中app出现红叉的解决方案

    原标题:Android Studio中app出现红叉的解决方案 如果你在网上搜索了一大圈之后发现还是没有解决你的问题,或许这篇文章能帮到你,同事的开发环境中遇到了,处理了一下午,期间包括删除工具,重装 ...

  6. 换脸App爆红引发人脸盗刷担忧?看到支付宝的回应放心了...

    近日,一款名为"ZAO"的AI换脸软件在朋友圈刷屏.一时各大新闻头条都是关于这款爆火的App的消息,但一夜爆红之后,ZAO的用户协议条款却引发网友担忧.有业内大V呼吁,用户不要跟风 ...

  7. android 提醒app,安卓手机上提醒工作的软件有哪些?

    原标题:安卓手机上提醒工作的软件有哪些? 众所周知,在当前的职场中,大多数的办公人士每天都要处理很多繁琐的工作事项,所以忙碌已经成为他们的工作常态.但是即便如此,这些职场人士仍然无法摆脱加班的困扰,因 ...

  8. 【创意】思考了一个APP创意——锁屏提醒。

    创意来源于百词斩的锁屏背单词功能. 锁屏界面也和百词斩的锁屏背单词界面差不多,另外也应该加上此条提醒不再显示按钮和下一条提醒,上一条提醒以及新提醒按钮. 人们每天都会经历很多事,也会有很多事要做.但, ...

  9. 关于vs生成app错误提示,提醒Execution failed for task ':transformClassesWithDexForDebug'.

    昨天将vs和android SDK更新之后生成app之后发现app生成出错,报错如下: FAILURE: Build failed with an exception. * What went wro ...

最新文章

  1. zabbix生成资源性能报表+邮件自动发送
  2. Boost::split用法详解
  3. 美国防部报告传指联想产品带来网络威胁
  4. PHP HashTable总结
  5. 【python 2】python 进阶
  6. Head First设计模式读书笔记——策略模式
  7. 哪些是Linux内核的同步机制,Linux内核的同步机制(1)
  8. mysql 报错解决思考Expression #5 of SELECT list is not in GROUP BY clause and contains nonaggregated column
  9. Apsara Stack 技术百科 | 边缘场景智能云化,让云无处不在
  10. asp.net打开客户端bartender文件
  11. python超声检测成像仿真_- 深度体验树莓派3:实操用Python驱动超声测距模块
  12. Sublime 中文命名乱码(显示为方框)
  13. 快速在PPT里插入多张图片
  14. ADOBE pr000的下载安装+基本操作
  15. Cesium中绘制矩形,根据四角/对角坐标绘制矩形
  16. kernel启动流程-start_kernel的执行_8.cpio initrd解包
  17. 不想学习的小颓靡怎么解决
  18. Photoshop制作倒影字
  19. 中文颜色名称与RGB颜色对照表
  20. 男人和女人分别必看的十大电影(共20部)

热门文章

  1. 每天学习Linux(3)---pwd命令
  2. 使用Netbeans创建java Web项目
  3. SQL Relay开源的数据库池连接代理服务器
  4. 一致性哈希算法以及其PHP实现
  5. SQLserver安全设置攻略
  6. Asp.net 不使用SQLDMO实现数据库备份和还原
  7. TensorRT Samples: MNIST(Plugin, add a custom layer)
  8. 设计模式之备忘录模式(Memento)摘录
  9. 【Live555】live555源码详解(四):Medium媒体基础类
  10. oracle1core,Oracle core06_latchlock