内容简介:经常玩微博的同志都知道,微博的持续点赞再取消功能,下面小编给大家带来了Android 仿微博的点赞功能的实现原理(持续点赞再取消),感兴趣的朋友跟随脚本之家小编一起看看吧
产品需求,实现类似微博的持续点赞再取消功能,因为自己也偶尔刷微博,对这功能有一定的使用上的了解,
至于微博点赞的具体实现我并不知道,微博点赞在断网的情况下依然能点赞,不会提示网络异常,等有网络之后
重新刷新,实际是没有点赞的,那就针对这现象去实现吧.
避免并发,减少CPU压力,我个人会想到 HandlerThread ,不懂可以自行科普,这里只说我实现的点赞功能原理.
private Timer mTimer;//定时器 private TimerTask mTask; mMap = new HashMap<>(); mMainHandler = new MainHandler();//处理主线程任务 mHandlerThread = new HandlerThread("praise_thread"); mHandlerThread.start();//start()必须要在getLooper()前调用 mThreadHandler = new ChildThreadHandler(mHandlerThread.getLooper());//处理子线程任务
自身封装一个单列的管理类:
private Map<String, Map<Long, Integer>> mMap;//
基于自身需求实现一个点赞的消息管理器,我这里第一个key是用户,第二个key是内容的唯一ID
把点赞消息存放在管理器和加入任务队列
public void addReport(String userId, long aId, int state) { stopTask();//停止定时器 init();//初始化操作 Map<Long, Integer> map; if (mMap.containsKey(userId)) {//这是处理用户key map = mMap.get(userId); } else { map = new Hashtable<>();//避免重复,自行科普 mMap.put(userId, map); } if (!map.containsKey(aId)) {//如果存在说明handler队列已经有但还没被处理 sendMsg(mThreadHandler, 0, userId, aId, state);//把任务加到子线程 } map.put(aId, state);//记录要提交的内容点赞状态 }
子线程消息处理:上报用户操作的消息,把上报结果发回给主线程
主线程消息处理 : 取出map里面对应的值和上报结果比较,
1.存在一致性,则移除map中对应的key-value,再断map是否还有消息没有上报,
否则开启定时器,定时把线程终止掉.
2.非一致性,则重新向子线程发送上报消息.
以上所述就是小编给大家介绍的《Android 仿微博的点赞功能的实现原理(持续点赞再取消)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 封装 axios 取消重复请求
- Git 设置和取消代理
- C# 代码取消 TFS 管控
- swift,alamofire取消之前的请求
- c – 强制允许取消引用NULL指针
- android – 如何取消动画,但不是结束它?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
高质量程序设计艺术
斯皮内利斯 / 韩东海 / 人民邮电出版社 / 2008-1 / 55.00元
在本书中,作者回归技术层面。从Apache web server、BSD版本的Unix system、ArgoUMl、ACE网络编程库等著名开源软件中选取了大量真实C、C++和java语言源代码,直观而深刻的阐述了代码中可能存在的各种质量问题,涉及可靠性、安全性、时间性和空间性、可移植性、可维护性以及浮点运算等方面,很多内容都市独辟蹊径,发前人所未发。正因如此,本书继作者的《代码阅读》之后在获Jo......一起来看看 《高质量程序设计艺术》 这本书的介绍吧!