内容简介:经常玩微博的同志都知道,微博的持续点赞再取消功能,下面小编给大家带来了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 – 如何取消动画,但不是结束它?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Twenty Lectures on Algorithmic Game Theory
Tim Roughgarden / Cambridge University Press / 2016-8-31 / USD 34.99
Computer science and economics have engaged in a lively interaction over the past fifteen years, resulting in the new field of algorithmic game theory. Many problems that are central to modern compute......一起来看看 《Twenty Lectures on Algorithmic Game Theory》 这本书的介绍吧!