Android 仿微博的点赞功能的实现原理(持续点赞再取消)
产品需求,实现类似微博的持续点赞再取消功能,因为自己也偶尔刷微博,对这功能有一定的使用上的了解,
至于微博点赞的具体实现我并不知道,微博点赞在断网的情况下依然能点赞,不会提示网络异常,等有网络之后
重新刷新,实际是没有点赞的,那就针对这现象去实现吧.
避免并发,减少CPU压力,我个人会想到HandlerThread,不懂可以自行科普,这里只说我实现的点赞功能原理.
privateTimermTimer;//定时器 privateTimerTaskmTask; mMap=newHashMap<>(); mMainHandler=newMainHandler();//处理主线程任务 mHandlerThread=newHandlerThread("praise_thread"); mHandlerThread.start();//start()必须要在getLooper()前调用 mThreadHandler=newChildThreadHandler(mHandlerThread.getLooper());//处理子线程任务
自身封装一个单列的管理类:
privateMap
把点赞消息存放在管理器和加入任务队列
publicvoidaddReport(StringuserId,longaId,intstate){ stopTask();//停止定时器 init();//初始化操作 Mapmap; if(mMap.containsKey(userId)){//这是处理用户key map=mMap.get(userId); }else{ map=newHashtable<>();//避免重复,自行科普 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仿微博的点赞功能的实现原理(持续点赞再取消),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。