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

    Android中Activity.Service.Fragment之间的相互通信比较麻烦,主要有以下一些方法: (1)使用广播,发送者发出广播,接收者接收广播后进行处理: (2)使用Handler和M ...

  2. mysql数据库乱码的问题解决

    排查原因:打断点,查看到底是在执行存数据库操作之前就已经乱码了,还是存数据库操作后乱码的. 1.前者解决方案: 在web.xml里面加上: <filter> <filter-name ...

  3. 最小生成树计数 bzoj 1016

    最小生成树计数 (1s 128M) award [问题描述] 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一 ...

  4. linux中输入输出和重定向问题

    输入输出解释 当我们执行shell的时候,每个进程都和三个打开的文件有关系,并使用文件描述符来引用这些文件.但这些文件不容易记忆,所以shell给了相应的文件名: 0:输入文件-标准输入(它的命令是输 ...

  5. css3+jquery制作3d旋转相册

    首先来看一下今天的炫酷效果: 首先分析一下这张图片: 1.每张图片都有倒影 2.这11张图片呈圆形均匀排列 3.可旋转,上下移动(当然这是效果做出来以后,图片是分析不出来的) 那下面就开始吧. 一.准 ...

  6. React Native初探

    前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...

  7. [deviceone开发]-do_Webview的基本示例

    一.简介 这个示例是webview的基础demo,加载了本地html文件,一个html做的登录的表单.这个示例也展示了webview里加载的html里的js代码怎么调用deviceone的SM,MM和 ...

  8. javascript的defer和async的区别。

    我们常用的script标签,有两个和性能.js文件下载执行相关的属性:defer和async defer的含义[摘自https://developer.mozilla.org/En/HTML/Elem ...

  9. JS实现文字截取(雾)

    今天在跳板群那里看到一个神奇的样式,效果: 感觉十分神奇,因为一开始以为他是只有一个P元素包着文字然后最后一个自动截取文字,而且最后一行还可以提前截取???这怎么做到的,然后想了一下css怎么做,好像 ...

  10. CentOS7系统安装及初始化

    1.运行VirtualBox5. 2.安装CentOS7系统. 注意:选择Basic Server类型 安装过程略. 3.修改计算机IP和计算机名. 1)nmtui 1.修改主机名: nmcli ge ...