Android 仿微博的點(diǎn)贊功能的實(shí)現(xiàn)原理(持續(xù)點(diǎn)贊再取消)
產(chǎn)品需求,實(shí)現(xiàn)類(lèi)似微博的持續(xù)點(diǎn)贊再取消功能,因?yàn)樽约阂才紶査⑽⒉?,?duì)這功能有一定的使用上的了解,
至于微博點(diǎn)贊的具體實(shí)現(xiàn)我并不知道,微博點(diǎn)贊在斷網(wǎng)的情況下依然能點(diǎn)贊,不會(huì)提示網(wǎng)絡(luò)異常,等有網(wǎng)絡(luò)之后
重新刷新,實(shí)際是沒(méi)有點(diǎn)贊的,那就針對(duì)這現(xiàn)象去實(shí)現(xiàn)吧.
避免并發(fā),減少CPU壓力,我個(gè)人會(huì)想到 HandlerThread ,不懂可以自行科普,這里只說(shuō)我實(shí)現(xiàn)的點(diǎn)贊功能原理.
private Timer mTimer;//定時(shí)器
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ù)
自身封裝一個(gè)單列的管理類(lèi):
private Map<String, Map<Long, Integer>> mMap;//基于自身需求實(shí)現(xiàn)一個(gè)點(diǎn)贊的消息管理器,我這里第一個(gè)key是用戶(hù),第二個(gè)key是內(nèi)容的唯一ID
把點(diǎn)贊消息存放在管理器和加入任務(wù)隊(duì)列
public void addReport(String userId, long aId, int state) {
stopTask();//停止定時(shí)器
init();//初始化操作
Map<Long, Integer> map;
if (mMap.containsKey(userId)) {//這是處理用戶(hù)key
map = mMap.get(userId);
} else {
map = new Hashtable<>();//避免重復(fù),自行科普
mMap.put(userId, map);
}
if (!map.containsKey(aId)) {//如果存在說(shuō)明handler隊(duì)列已經(jīng)有但還沒(méi)被處理
sendMsg(mThreadHandler, 0, userId, aId, state);//把任務(wù)加到子線程
}
map.put(aId, state);//記錄要提交的內(nèi)容點(diǎn)贊狀態(tài)
}
子線程消息處理:上報(bào)用戶(hù)操作的消息,把上報(bào)結(jié)果發(fā)回給主線程
主線程消息處理 : 取出map里面對(duì)應(yīng)的值和上報(bào)結(jié)果比較,
1.存在一致性,則移除map中對(duì)應(yīng)的key-value,再斷map是否還有消息沒(méi)有上報(bào),
否則開(kāi)啟定時(shí)器,定時(shí)把線程終止掉.
2.非一致性,則重新向子線程發(fā)送上報(bào)消息.
總結(jié)
以上所述是小編給大家介紹的Android 仿微博的點(diǎn)贊功能的實(shí)現(xiàn)原理(持續(xù)點(diǎn)贊再取消),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Android仿直播特效之點(diǎn)贊飄心效果
- Android貝塞爾曲線實(shí)現(xiàn)直播點(diǎn)贊效果
- Android實(shí)現(xiàn)朋友圈點(diǎn)贊列表
- Android實(shí)現(xiàn)點(diǎn)贊動(dòng)畫(huà)(27)
- Android PraiseTextView實(shí)現(xiàn)朋友圈點(diǎn)贊功能
- Android listview點(diǎn)贊問(wèn)題分析
- 簡(jiǎn)單實(shí)用的Android UI微博動(dòng)態(tài)點(diǎn)贊效果
- 很贊的引導(dǎo)界面效果Android控件ImageSwitcher實(shí)現(xiàn)
- Android項(xiàng)目開(kāi)發(fā) 教你實(shí)現(xiàn)Periscope點(diǎn)贊效果
- Android使用SurfaceView實(shí)現(xiàn)飄贊動(dòng)畫(huà)
相關(guān)文章
android中TabHost的圖標(biāo)(48×48)和文字疊加解決方法
開(kāi)發(fā)過(guò)程中,有時(shí)候圖標(biāo)稍微大點(diǎn),比如48×48的時(shí)候,文字就會(huì)和圖標(biāo)疊加起來(lái),遇到這種問(wèn)題我們?cè)撛鯓犹幚砟??本文將詳?xì)介紹希望對(duì)你有所幫助2013-01-01
Android4.4新增函數(shù)訪問(wèn)外部存儲(chǔ)
這篇文章主要介紹了Android4.4新增函數(shù)訪問(wèn)外部存儲(chǔ)的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10
Android編程實(shí)現(xiàn)ListView滾動(dòng)提示等待框功能示例
這篇文章主要介紹了Android編程實(shí)現(xiàn)ListView滾動(dòng)提示等待框功能,結(jié)合實(shí)例形式分析了Android ListView滾動(dòng)事件相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-02-02
Android實(shí)現(xiàn)驗(yàn)證碼登錄
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)驗(yàn)證碼登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03
Android自定義view實(shí)現(xiàn)動(dòng)態(tài)柱狀圖
這篇文章主要為大家詳細(xì)介紹了Android自定義view實(shí)現(xiàn)動(dòng)態(tài)柱狀圖的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
解決Android 5.1限制外置SD卡寫(xiě)入權(quán)限的問(wèn)題
今天小編就為大家分享一篇解決Android 5.1限制外置SD卡寫(xiě)入權(quán)限的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Android studio配置lambda表達(dá)式教程
Java 8的一個(gè)大亮點(diǎn)是引入Lambda表達(dá)式,使用它設(shè)計(jì)的代碼會(huì)更加簡(jiǎn)潔。接下來(lái)通過(guò)本文給大家介紹Android studio配置lambda表達(dá)式教程,需要的朋友參考下吧2017-05-05
flutter日期選擇器 flutter時(shí)間選擇器
這篇文章主要為大家詳細(xì)介紹了flutter日期選擇器,flutter時(shí)間選擇器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
Android圖像切換器imageSwitcher的實(shí)例應(yīng)用
這篇文章主要為大家詳細(xì)介紹了Android圖像切換器imageSwitcher的實(shí)例應(yīng)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10
Android自定義View實(shí)現(xiàn)照片裁剪框與照片裁剪功能
這篇文章主要介紹了Android自定義View實(shí)現(xiàn)照片裁剪框與照片裁剪功能的相關(guān)資料,需要的朋友可以參考下2016-07-07

