天天看點

android點贊取消贊功能嗎,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> mMap;//基于自身需求實作一個點贊的消息管理器,我這裡第一個key是使用者,第二個key是内容的唯一ID

把點贊消息存放在管理器和加入任務隊列

public void addReport(String userId,long aId,int state) {

stopTask();//停止定時器

init();//初始化操作

Map 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,userId,aId,state);//把任務加到子線程

}

map.put(aId,state);//記錄要送出的内容點贊狀态

}

子線程消息處理:上報使用者操作的消息,把上報結果發回給主線程

主線程消息處理 :  取出map裡面對應的值和上報結果比較,

1.存在一緻性,則移除map中對應的key-value,再斷map是否還有消息沒有上報,

否則開啟定時器,定時把線程終止掉.

2.非一緻性,則重新向子線程發送上報消息.

總結

以上所述是小編給大家介紹的Android 仿微網誌的點贊功能的實作原理(持續點贊再取消),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對程式設計小技巧網站的支援!

總結

如果覺得程式設計之家網站内容還不錯,歡迎将程式設計之家網站推薦給程式員好友。

本圖文内容來源于網友網絡收集整理提供,作為學習參考使用,版權屬于原作者。