APP之红点提醒三个阶段
下面这个页面就是我们进入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之红点提醒三个阶段的更多相关文章
- Azure Data Factory(四)集成 Logic App 的邮件通知提醒
一,引言 上一篇有介绍到使用Azure Data Factory 复制数据,然后有集成 Azure DevOps 实现CI/CD,但是对于真正的项目来说,这些肯定是不够的,比如说在执行 Azure P ...
- 关于vs生成app错误提示,提醒Execution failed for task ':transformClassesWithDexForDebug'.
昨天将vs和android SDK更新之后生成app之后发现app生成出错,报错如下: FAILURE: Build failed with an exception. * What went wro ...
- 仿微信小红圈消息提示App消息红圆点提示
代码: <div class="wrap"> <div class="img"></div> <div class=& ...
- iOS10之Expected App Behaviors
昨天上架到appStore的时候碰到个问题,构建好后上传到itunesconnect的的包都用不了, 显示错误为:此构建版本无效. 或者英文显示为:ITC.apps.preReleaseBuild.e ...
- 评论 “App死亡潮:400万应用僵尸超八成,周期仅10月”
点这里 原文: App死亡潮:400万应用僵尸超八成,周期仅10月 时间 2015-04-05 22:48:19 和讯科技相似文章 (16)原文 http://tech.hexun.com/201 ...
- 打造支持apk下载和html5缓存的 IIS(配合一个超简单的android APP使用)具体解释
为什么要做这个看起来不靠谱的东西呢? 由于刚学android开发,还不能非常好的熟练控制android界面的编辑和操作,所以我的一个急着要的运用就改为html5版本号了,反正这个运用也是须要从serv ...
- 微信iOS收款到账语音提醒开发总结
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/yYCaPMxHGT9LyRyAPewVWQ 作者:l ...
- iOS后台唤醒实战:微信收款到账语音提醒技术总结
1.前言 微信为了解决小商户老板们在频繁交易中不方便核对.确认到账的功能痛点,产品MM提出了新版本需要支持收款到账语音提醒功能.本文借此总结了iOS平台上的APP后台唤醒和语音合成.播放等一系列技术开 ...
- 制作一个App的完整流程是哪些
APP开发流程其实并不复杂,但是对于客户来说,.一般移动APP开发都离不开UI设计师.前端开发.后端开发.测试专员.产品经理等,由于他们的工作性质都不一样,我们且先把APP软件开发项目分为三个阶段: ...
随机推荐
- centos7.2 get pid by process name with python3.6
centos7.2 get pid by process name with python3.6 #-*- encoding:UTF-8 -*- import os import sys import ...
- (转)防止人为误操作MySQL数据库技巧一例
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1321061 防止人 ...
- SQLite使用入门
什么是SQLite SQLite是一款非常轻量级的关系数据库系统,支持多数SQL92标准.SQLite在使用前不需要安装设置,不需要进程来启动.停止或配置,而其他大多数SQL数据库引擎是作为一个单独的 ...
- linux文件映射到windows(方便用虚拟机搭建linux服务器,用本地windows代码编辑)
1,安装docker: https://docs.docker.com/install/linux/docker-ce/centos/ 2,linux上创建好需要共享的目录 /data/share(可 ...
- UBUNTU 下 APACHE2 Too many open files: Error retrieving pid file /var/run/apache2.pid
cat /proc/sys/fs/file-max 系统可打开的最大文件个数 ulimit -n 当前系统限制的个数 ulimit -n 10240 调整当前系统的限制 修改/etc/sysctl.c ...
- Eclipse及IDEA插件开发
https://github.com/eclipse/eclipse.jdt.ui http://www.eclipse.org/jdt/ui/ https://www.cnblogs.com/xin ...
- Python -- 网络编程 -- 抓取网页图片 -- 图虫网
字符串(str)编码成字节码(bytes),字节码解码为字符串 获取当前环境编码:sys.stdin.encoding url编码urllib.parse.quote() url解码urllib.pa ...
- ConfigurationManager
ConfigurationManager读取和写入 提供对客户端应用程序配置文件的访问 通过引入System.Configuration.dll可以用ConfigurationManager类来读取项 ...
- NewBluePill源码学习 <一>
NewBluePill的源码也看的差不多了,一直说等有时间了再写学习的一些心得,拖来拖去弄到现在了,时间不是等来的,慢慢开始吧. 0x00 初识硬件虚拟化 硬件虚拟化对大数人来讲还是比较陌生. ...
- SQLAlchemy使用说明之ORM
对象关系映射(Object Relation Map, ORM)可以将一个类映射为关系模式(数据表). 使用ORM比直接书写SQL在安全性,可读性上都有很大优势. Working with Relat ...