Android 仿微博的點(diǎn)贊功能的實(shí)現(xiàn)原理(持續(xù)點(diǎn)贊再取消)
產(chǎn)品需求,實(shí)現(xiàn)類似微博的持續(xù)點(diǎn)贊再取消功能,因?yàn)樽约阂才紶査⑽⒉?,對這功能有一定的使用上的了解,
至于微博點(diǎn)贊的具體實(shí)現(xiàn)我并不知道,微博點(diǎn)贊在斷網(wǎng)的情況下依然能點(diǎn)贊,不會提示網(wǎng)絡(luò)異常,等有網(wǎng)絡(luò)之后
重新刷新,實(shí)際是沒有點(diǎn)贊的,那就針對這現(xiàn)象去實(shí)現(xiàn)吧.
避免并發(fā),減少CPU壓力,我個人會想到 HandlerThread ,不懂可以自行科普,這里只說我實(shí)現(xiàn)的點(diǎn)贊功能原理.
private Timer mTimer;//定時器 private TimerTask mTask; mMap = new HashMap<>(); mMainHandler = new MainHandler();//處理主線程任務(wù) mHandlerThread = new HandlerThread("praise_thread"); mHandlerThread.start();//start()必須要在getLooper()前調(diào)用 mThreadHandler = new ChildThreadHandler(mHandlerThread.getLooper());//處理子線程任務(wù)
自身封裝一個單列的管理類:
private Map<String, Map<Long, Integer>> mMap;//
基于自身需求實(shí)現(xiàn)一個點(diǎn)贊的消息管理器,我這里第一個key是用戶,第二個key是內(nèi)容的唯一ID
把點(diǎn)贊消息存放在管理器和加入任務(wù)隊(duì)列
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<>();//避免重復(fù),自行科普 mMap.put(userId, map); } if (!map.containsKey(aId)) {//如果存在說明handler隊(duì)列已經(jīng)有但還沒被處理 sendMsg(mThreadHandler, 0, userId, aId, state);//把任務(wù)加到子線程 } map.put(aId, state);//記錄要提交的內(nèi)容點(diǎn)贊狀態(tài) }
子線程消息處理:上報(bào)用戶操作的消息,把上報(bào)結(jié)果發(fā)回給主線程
主線程消息處理 : 取出map里面對應(yīng)的值和上報(bào)結(jié)果比較,
1.存在一致性,則移除map中對應(yīng)的key-value,再斷map是否還有消息沒有上報(bào),
否則開啟定時器,定時把線程終止掉.
2.非一致性,則重新向子線程發(fā)送上報(bào)消息.
總結(jié)
以上所述是小編給大家介紹的Android 仿微博的點(diǎn)贊功能的實(shí)現(xiàn)原理(持續(xù)點(diǎn)贊再取消),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- Android仿直播特效之點(diǎn)贊飄心效果
- Android貝塞爾曲線實(shí)現(xiàn)直播點(diǎn)贊效果
- Android實(shí)現(xiàn)朋友圈點(diǎn)贊列表
- Android實(shí)現(xiàn)點(diǎn)贊動畫(27)
- Android PraiseTextView實(shí)現(xiàn)朋友圈點(diǎn)贊功能
- Android listview點(diǎn)贊問題分析
- 簡單實(shí)用的Android UI微博動態(tài)點(diǎn)贊效果
- 很贊的引導(dǎo)界面效果Android控件ImageSwitcher實(shí)現(xiàn)
- Android項(xiàng)目開發(fā) 教你實(shí)現(xiàn)Periscope點(diǎn)贊效果
- Android使用SurfaceView實(shí)現(xiàn)飄贊動畫
相關(guān)文章
Android實(shí)現(xiàn)檢測手機(jī)搖晃的監(jiān)聽器
本文給大家分享一段代碼實(shí)現(xiàn)檢測手機(jī)搖晃的監(jiān)聽器,代碼簡單易懂,非常不錯,感興趣的朋友參考下吧2016-12-12Android自定義view實(shí)現(xiàn)車載可調(diào)整軌跡線
這篇文章主要為大家詳細(xì)介紹了Android自定義view實(shí)現(xiàn)車載可調(diào)整軌跡線,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06Android實(shí)現(xiàn)簡單的下拉阻尼效應(yīng)示例代碼
下面小編就為大家分享一篇Android實(shí)現(xiàn)簡單的下拉阻尼效應(yīng)示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01Android實(shí)現(xiàn)商城購物車功能的實(shí)例代碼
最近公司項(xiàng)目做商城模塊,需要實(shí)現(xiàn)購物車功能,主要實(shí)現(xiàn)了單選、全選,金額合計(jì),商品刪除,商品數(shù)量加減等功能,這篇文章主要介紹了Android實(shí)現(xiàn)商城購物車功能,需要的朋友可以參考下2019-06-06一個Activity中多個Fragment實(shí)現(xiàn)沉浸式狀態(tài)欄的解決方法
這篇文章主要介紹了一個Activity中多個Fragment實(shí)現(xiàn)沉浸式狀態(tài)欄解決方法,對于解決這個問題要分為兩部分,具體內(nèi)容詳情,大家參考下本文吧2017-01-01Flutter利用SizeTransition實(shí)現(xiàn)組件飛入效果
本文將為大家介紹SizeTransition,SizeTransition用于更改子組件的尺寸來實(shí)現(xiàn)動畫,支持垂直方向或水平方向修改動畫。本文將利用其實(shí)現(xiàn)組件飛入效果,需要的可以參考一下2022-04-04Android使用TextView實(shí)現(xiàn)無下劃線超鏈接的方法
這篇文章主要介紹了Android使用TextView實(shí)現(xiàn)無下劃線超鏈接的方法,結(jié)合實(shí)例形式分析了Android中TextView超鏈接去除下劃線的相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2016-08-08Android計(jì)時器控件Chronometer應(yīng)用實(shí)例
這篇文章主要為大家詳細(xì)介紹了Android計(jì)時器控件Chronometer應(yīng)用實(shí)例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09