接到一个需求,用户下单后,商店这边需要显示在线订单列表,订单十分钟内有效。于是需要设计倒计时,显示每个订单剩余处理时间。
 
    倒计时剩余时间: 订单创建时间 + 10分钟  - 系统当前时间
    刷新剩余时间:在ListView的adapter的getView中,根据绑定的order按照上面的公式算出时间并显示
 
    当用户下单后,服务器是通过推送告知商店有新的在线订单,然后商店再去获取最新的在线订单列表。如果在线订单界面来处理收到的推送,每当有新订单的通知,就去请求服务器获取最新列表,这样最简单直接。然后再写个定时器,每秒执行ListView的notifyDataChanged来刷新倒计时,请求到数据时就将就的订单列表clear,设置新的数据。
 
    但是,当其他的位置需要显示在线订单列表数量的时候,怎么处理?并且,直接写在Activity中会导致代码很乱,难以维护。
 
    新的想法是,创建一个独立的计时器,每秒执行任务task,至于需要执行的task只需要实现Task接口,并且注册到task列表中。这样在线订单的Activity只需要实现并注册task,然后把需要的事情写在task函数中就行了。
    
    至于在线订单列表,就用一个全局的管理类来处理,初始化的时候请求一次数据,放到静态的list中,只有收到在线订单的通知或者主动的执行管理类的静态函数needChange(),才会去请求后台的在线订单列表。在线订单Activity只需要调用管理类的getOnlineOrders()就能得到订单列表。
 
    基本上解决了倒计时显示,但是还是隐藏了一个问题,就是计算剩余时间。本来,大多数android设备的时间都是正常了,但是难免有些比较调皮(相差个几年或者几小时之类的)。这样导致了android系统时间和订单创建的时间(服务器时间)有一定的差距,影响了计算剩余时间公式的准确性。
 
    解决时间不准确的思路时,刚开始想直接修改系统时间,但是想想,看有没有另外的方法。后来和后台商量,提供一个校准时间的接口,返回服务器当前时间。如果每秒都访问,这样设备过多时有点给服务器压力了。设置一个计数器,当过了多少秒就请求一次,比如100或者1000之类的。另外当android系统时间与服务器时间差距在1s的时候,就选择系统时间。(如果系统时间准确,或许可以将校准时间的频率再低点)
 
    以上就是关于倒计时的思路了

Android 在线订单倒计时设计的更多相关文章

  1. Android拼图游戏的设计逻辑,从切图到交互动画,从关卡到倒计时,实例提高!

    Android拼图游戏的设计逻辑,从切图到交互动画,从关卡到倒计时,实例提高! 群英传的最后一章,我大致的看了一下这个例子,发现鸿洋大神也做过,就参考两个人的设计逻辑,感觉都差不多,就这样实现起来了 ...

  2. 20155338课程设计个人报告——基于ARM实验箱的Android交友软件的设计与实现

    课程设计个人报告--基于ARM实验箱的Android交友软件的设计与实现 个人贡献 实验环境的搭建 代码调试 在电脑上成功运行 研究程序代码撰写小组报告 一.实验环境 1.Eclipse软件开发环境: ...

  3. Android使用CountDownTimer倒计时

    1.布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android ...

  4. 拓展 Android 原生 CountDownTimer 倒计时

    拓展 Android 原生 CountDownTimer 倒计时 [TOC] CountDownTimer 在系统的CountDownTimer上进行的修改,主要是拓展了功能,当然也保留了系统默认的模 ...

  5. [转]Android App整体架构设计的思考

    1. 架构设计的目的 对程序进行架构设计的原因,归根到底是为了提高生产力.通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点, ...

  6. android 在线升级借助开源中国App源码

    android 在线升级借助开源中国App源码 http://www.cnblogs.com/luomingui/p/3949429.html android 在线升级借助开源中国App源码分析如下: ...

  7. [课程设计]Scrum 2.3 多鱼点餐系统开发进度 (订单一览设计)

    Scrum 2.3 多鱼点餐系统开发进度  (订单一览设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统 ...

  8. Android App的架构设计:从VM、MVC、MVP到MVVM

    随着Android应用开发规模的扩大,客户端业务逻辑也越来越复杂,已然不是简单的数据展示了.如同后端开发遇到瓶颈时采用的组件拆分思想,客户端也需要进行架构设计,拆分视图和数据,解除模块之间的耦合,提高 ...

  9. dedecms网站如何做在线订单功能

    做网站的时候经常会遇到做在线订单的这个功能,而且这个功能会在企业网站的建设中经常的遇到,今天51模板集就拿物流网的在线订单功能做一个详细的介绍. 第一步:自定义表单 打开后台:核心-->自定义表 ...

随机推荐

  1. 安装XAMPP遇到的问题及解决方法

    1.XAMPP无法启动Apache Xampp的获得和安装都十分简单,你只要到以下网址: http://www.apachefriends.org/zh_cn/xampp.html 下载xampp即可 ...

  2. 供应链需求调研CheckList

    总体(General) 基本情况 1.    企业地址.邮编.电话.传真,项目联系人等基本资料. 2.    企业经营范围,产品线和主导产品. 3.    企业近几年的产值及销售额. 4.    企业 ...

  3. 禁止backspace键(退格键),但输入文本框时不禁止(兼容IE)

    Ext实现方式: Ext.getDoc().on('keydown',function(e){      if(e.getKey() == 8 && e.getTarget().typ ...

  4. 尝试解析js面试题(二)

    说明:一共有13题(原本14题,最后一道什么鬼,嫌弃不要了),覆盖面比较广,都属于比较烧脑的类型,各种神坑:不过对于夯实js理论基础帮助非常大:看看都能做对几题吧(

  5. 使用ganglia监控hadoop及hbase集群

    一.Ganglia简介 Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点.每台计算机都运行一个收集和发送度量数据(如处理器速度.内存使用量等)的名为 gm ...

  6. SQL Server数据库性能优化技巧

    查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引: 2.I/O吞吐量小,形成了瓶颈效应: 3.内存不足: 4.网络速度慢: 5.查询出的数据量过大: 6.锁或者死锁: 7.返回了不必 ...

  7. linux 安装mysql数据库——tar.gz包解压安装法

    mysql数据库有多种安装方式,本文只介绍在Linux服务器上的tar.gz包解压安装法, 先通过mysql官网或者网络资源下载 mysql-5.7.3-m13-linux-glibc2.5-x86_ ...

  8. Mac MySQL启动不了解决办法(MySQL卸载重新安装教程)

    一段时间没用MySQL,今天使用时突然发现启动不了了,怎么点start都没用,或者输入密码了  还是没用... 好急...找了一圈资料,没发现特别好的解决办法,只能使用大招了----->< ...

  9. 树莓派3B初始化后一些必须的设置

    接上一篇,SSH已经登录成功(http://www.cnblogs.com/crosys/p/6220108.html) 1.树莓派系统的设置 1.1扩展系统空间 因为内存卡还有很多空间没有分配,第一 ...

  10. android android BitmapFactory报错OOM

    解决方法:listview中尽量不要使用ImageView作为item的组件 换成view并设background