接到一个需求,用户下单后,商店这边需要显示在线订单列表,订单十分钟内有效。于是需要设计倒计时,显示每个订单剩余处理时间。
 
    倒计时剩余时间: 订单创建时间 + 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. 一个java文件中可包含多个main方法

    java中的main方法是java应用程序的入口,java程序在运行时,首先调用执行main方法.但并不是说java中只能有一个main方法,不同类中都可以包含main方法.当JVM进行编译时,会提示 ...

  2. Salesforce的sharing Rule 不支持Lookup型字段解决方案

    Salesforce 中 sharing rule 并不支持Look up 字段 和 formula 字段.但在实际项目中,有时会需要在sharing rule中直接取Look up型字段的值,解决方 ...

  3. jq实现发送短信验证码

    前端的工作经常会涉及到短信验证的功能(注册或获取当前手机号信息),于是自己也写了一个,路过的小伙伴可以看一下 未点击状态 点击之后的状态 var timer=""; ; var v ...

  4. ArcGIS Engine开发之地图导出

    关于地图导出的方法有很多,但是核心技术就那么一点.下面是从项目实战中总结的一部分地图导出的方法:(以全域导出和区域导出为例) 1.由于地图导出用到的函数和方法容易重复,增加了工作量故首先将其进行封装成 ...

  5. Animation

    Animation 效果 用法 1.非常简单,导入两个文件(UIView+SetRect) (UIView+ImageEffects) 源码 github源码:https://github.com/m ...

  6. Oracle索引梳理系列(九)- 浅谈聚簇因子对索引使用的影响及优化方法

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  7. Java并发之原子变量和原子引用与volatile

    我们知道在并发编程中,多个线程共享某个变量或者对象时,必须要进行同步.同步的包含两层作用:1)互斥访问(原子性):2)可见性:也就是多个线程对共享的变量互斥地访问,同时线程对共享变量的修改必须对其他线 ...

  8. Oracle学习笔记十二 子程序(存储过程、自定函数)和程序包

    子程序 子程序:命名的 PL/SQL 块,编译并存储在数据库中.   子程序的各个部分: 1.声明部分 2.可执行部分 3.异常处理部分(可选) 子程序的分类: 1.过程 - 执行某些操作 2.函数 ...

  9. MySQL 数据库的备份与恢复

    一.MySQL 常见的备份方式 1. 直接拷贝数据库文件(物理拷贝) 2. 使用 mysqldump 工具备份 3. 使用 mysqlhotcopy 工具备份 4. 使用 mysql 的主从同步复制, ...

  10. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...