接到一个需求,用户下单后,商店这边需要显示在线订单列表,订单十分钟内有效。于是需要设计倒计时,显示每个订单剩余处理时间。
 
    倒计时剩余时间: 订单创建时间 + 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. C标准头文件<errno.h>

    声明了错误处理相关的宏 errno errno即error number,在程序启动时被设为0,当某个库函数运行出现错误的时候,会将相应的能表达错误类型的数字赋值给这个左值,这些数字往往有相应的宏来表 ...

  2. Mac下启动和停止Mysql服务

    方法1. 启动Mysql服务   sudo /Library/StartupItems/MySQLCOM/MySQLCOM start   停止Mysql服务   sudo /Library/Star ...

  3. GJM: 设计模式 - 观察者模式

    GJM : 观察者模式 视频地址: http://www.imooc.com/learn/415 本课程通过一个天气预报的发布和订阅案例,来讲解观察者模式在Java项目中的应用.主要包括观察者模式的结 ...

  4. JS高程5.引用类型(4)Array类型的各类方法

    一.转换方法 所有的对象都具有toLocaleString(),toString()和valueOf()方法.调用toString()方法会返回由数组中的每个值的字符串拼接而成的一个以逗号分隔的字符串 ...

  5. Nuclear开始

    为什么Nuclear 这里列举Nuclear在竞品中的优势: 借助浏览器本身的机制,无任何代码约定和入侵 放心使用HTML+CSS+JS observejs替代EventLoop.requestAni ...

  6. TiQuery

    TiQuery 是一个基于JQuery 的在Titanium上使用的 javascript 库 TiQuery 为TI 提供了很快捷的方法: // Utilities $.info('My messa ...

  7. Xcode8+和iOS10+使用Masonry自动计算行高

    说起tableView的自动计算行高,真的是不想再提了,写了不知道几百遍了.可就是这麽一个小玩意儿,把我给难的不行不行的,眼看都要没头发了. 1.设置tableView的预估行高和行高为自动计算 // ...

  8. android MVP设计模式!

    实现原理: MainActivity 用来更新UI,和显示业务逻辑的结果! LoginPresenterCompl 用来处理 业务逻辑 ILoginPresenter 业务处理类抽象出来的接口 ILo ...

  9. 9.PNG的制作

    1.背景自适应且不失真问题的存在 制作自适应背景图片是UI开发的一个广泛问题,也是界面设计师渴望解决的问题,我相信我们彼此都深有体会.       比如: 1.列表的背景图一定,但是列表的高度随着列表 ...

  10. 两listview联动

    package com.mttz; import java.util.ArrayList;import java.util.List; import com.mttz.adapter.CaiDanAD ...