下面这个页面就是我们进入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. jq03--基础函数

    我们继续学习jq的一些函数,包括向jq对象添加.删除CSS属性以及遍历DOM树. 1.获取.设置CSS类 addClass()--向被选元素添加1个或多个类属性 .importance{font-we ...

  2. Hadoop2.0.0+CDH4.5.0集群配置

    Hadoop 2.0.0-cdh4.5.0安装:http://blog.csdn.net/u010967382/article/details/18402217 CDH版本下载:http://arch ...

  3. Eclipse-离线安装Memory Anlysis Tool

    Eclipse版本:Version: Mars.2 Release (4.5.2) 1.从官网下载MAT Memory Anlysis Tool http://www.eclipse.org/mat/ ...

  4. C/C++ -- Gui编程 -- Qt库的使用 -- 构造函数中添加组件

    在构造函数中定义一个标签,设置自动换行和样式表 -----mywidget.cpp----- #include "mywidget.h" #include "ui_myw ...

  5. Base64加密解密工具类

    使用Apache commons codec类Base64进行加密解密 maven依赖 <dependency> <groupId>commons-codec</grou ...

  6. android学习-Adapter适配器进阶

    参考资源 Android 快速开发系列 打造万能的ListView GridView 适配器 实现代码复用,争取打机**的时间. android4.4源码 target=android-19 一般自定 ...

  7. 机器学习--Gradient Boosting Machine(GBM)调参方法详解

    一.GBM参数 总的来说GBM的参数可以被归为三类: 树参数:调节模型中每个决策树的性质 Boosting参数:调节模型中boosting的操作 其他模型参数:调节模型总体的各项运作 1.树参数 现在 ...

  8. php的一个验证邮箱的正则表达式

    /([a-z0-9]*[-_\.]*[a-z0-9]+)*[-_\.]*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.]([a-z0-9]{2,3}|[a-z0-9]*[-_]?[a-z ...

  9. Cmake编写JNI

    调用两个库 CMakeLists.txt //把那种大段的注释去掉了 cmake_minimum_required(VERSION ) add_library( # Sets the name of ...

  10. C#中深拷贝和浅拷贝

    一:概念 内存:用来存储程序信息的介质. 指针:指向一块内存区域,通过它可以访问该内存区域中储存的程序信息.(C#也是有指针的) 值类型:struct(整形.浮点型.decimal的内部实现都是str ...