下面这个页面就是我们进入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. Azure Data Factory(四)集成 Logic App 的邮件通知提醒

    一,引言 上一篇有介绍到使用Azure Data Factory 复制数据,然后有集成 Azure DevOps 实现CI/CD,但是对于真正的项目来说,这些肯定是不够的,比如说在执行 Azure P ...

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

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

  3. 仿微信小红圈消息提示App消息红圆点提示

    代码: <div class="wrap"> <div class="img"></div> <div class=& ...

  4. iOS10之Expected App Behaviors

    昨天上架到appStore的时候碰到个问题,构建好后上传到itunesconnect的的包都用不了, 显示错误为:此构建版本无效. 或者英文显示为:ITC.apps.preReleaseBuild.e ...

  5. 评论 “App死亡潮:400万应用僵尸超八成,周期仅10月”

    点这里 原文: App死亡潮:400万应用僵尸超八成,周期仅10月 时间 2015-04-05 22:48:19  和讯科技相似文章 (16)原文  http://tech.hexun.com/201 ...

  6. 打造支持apk下载和html5缓存的 IIS(配合一个超简单的android APP使用)具体解释

    为什么要做这个看起来不靠谱的东西呢? 由于刚学android开发,还不能非常好的熟练控制android界面的编辑和操作,所以我的一个急着要的运用就改为html5版本号了,反正这个运用也是须要从serv ...

  7. 微信iOS收款到账语音提醒开发总结

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/yYCaPMxHGT9LyRyAPewVWQ 作者:l ...

  8. iOS后台唤醒实战:微信收款到账语音提醒技术总结

    1.前言 微信为了解决小商户老板们在频繁交易中不方便核对.确认到账的功能痛点,产品MM提出了新版本需要支持收款到账语音提醒功能.本文借此总结了iOS平台上的APP后台唤醒和语音合成.播放等一系列技术开 ...

  9. 制作一个App的完整流程是哪些

    APP开发流程其实并不复杂,但是对于客户来说,.一般移动APP开发都离不开UI设计师.前端开发.后端开发.测试专员.产品经理等,由于他们的工作性质都不一样,我们且先把APP软件开发项目分为三个阶段: ...

随机推荐

  1. POJ 1298

    #include<iostream>// chengdacaizi 注释!2008 11 05 #include<string> using namespace std; in ...

  2. js04

    接着看一些js的基础,这里主要说一下js的对象. 1.对象:    js中的所有事物都可以看作是对象:字符串.数值.数组.函数...    内建对象:String    Date    Array   ...

  3. 如何安装windows7

    前因:之前安装的win7的系统,用了激活工具,刚开始的几个星期还没察觉有何问题.直到有天系统给出异常提示:系统资源不足,无法完成请求的服务.仔细排查之后发现是系统内核句柄数一直增加不释放,句柄数大概有 ...

  4. MAC帧格式、IPV4数据报格式、TCP报文格式、UDP数据报格式

    1.MAC帧格式 类型:2字节,指出数据域中携带的数据应交给哪些协议实体处理 校验码:校验数据段(采用32位CRC冗余校验方式进行校验) 2.IPV4数据报 版本:IP协议版本,这里为4 首部长度:占 ...

  5. Exceptionless搭配log4net记录日志

    接上篇: Exceptionless 本地部署 在部署完成后可以使用log4net搭配Exceptionless来记录日志. 过程很简单,使用Nuget安装Exceptionless.Log4net, ...

  6. nodejs + express 热更新

    以前node中的express框架,每次修改代码之后,都需要重新npm start 才能看到改动的效果,非常麻烦,所以这里引入nodemon模块,实现了不用重启也能自动更新这样的好处 1.全局安装no ...

  7. C/C++中的常量到底存在了什么地方

    一般来说,基本类型(整型.字符型等)常量会在编译阶段被编译成立即数,占的是代码段的内存.(代码段是只读的,而且不允程序员获取代码段的地址,所以在c++中,尽量不为const分配数据段的内存,但是一旦取 ...

  8. HTTPClient 超时链接设置

    远程访问链接,设置时间,从而减少不必要的麻烦,但是HttpClient版本不一致,方法不一样,所以有了如下设置 原帖链接:https://www.cnblogs.com/jimmy-muyuan/p/ ...

  9. win7下如何解决对方可以ping通我,但我ping不通对方问题

    以下是在百度经验里面找到的文章:http://jingyan.baidu.com/article/6b97984da3ac851ca2b0bfe1.html 当我在虚拟机的linux系统中ping本机 ...

  10. [PY3]——logging

    logging模块的logger.handler.filter.formatter Logger记录器 提供日志接口,供应用代码使用.logger最长用的操作有两类:配置和发送日志消息.可以通过log ...