欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 仿微博的點贊功能的實現(xiàn)原理(持續(xù)點贊再取消)

 更新時間:2018年03月13日 11:28:32   作者:famabb  
經(jīng)常玩微博的同志都知道,微博的持續(xù)點贊再取消功能,下面小編給大家?guī)砹薃ndroid 仿微博的點贊功能的實現(xiàn)原理(持續(xù)點贊再取消),感興趣的朋友跟隨腳本之家小編一起看看吧

 產(chǎn)品需求,實現(xiàn)類似微博的持續(xù)點贊再取消功能,因為自己也偶爾刷微博,對這功能有一定的使用上的了解,

       至于微博點贊的具體實現(xiàn)我并不知道,微博點贊在斷網(wǎng)的情況下依然能點贊,不會提示網(wǎng)絡異常,等有網(wǎng)絡之后

       重新刷新,實際是沒有點贊的,那就針對這現(xiàn)象去實現(xiàn)吧.

            避免并發(fā),減少CPU壓力,我個人會想到 HandlerThread ,不懂可以自行科普,這里只說我實現(xiàn)的點贊功能原理.

private Timer mTimer;//定時器 
private TimerTask mTask; 
mMap = new HashMap<>(); 
mMainHandler = new MainHandler();//處理主線程任務 
mHandlerThread = new HandlerThread("praise_thread"); 
mHandlerThread.start();//start()必須要在getLooper()前調(diào)用 
mThreadHandler = new ChildThreadHandler(mHandlerThread.getLooper());//處理子線程任務 

       自身封裝一個單列的管理類: 

private Map<String, Map<Long, Integer>> mMap;//基于自身需求實現(xiàn)一個點贊的消息管理器,我這里第一個key是用戶,第二個key是內(nèi)容的唯一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隊列已經(jīng)有但還沒被處理 
     sendMsg(mThreadHandler, 0, userId, aId, state);//把任務加到子線程 
  } 
  map.put(aId, state);//記錄要提交的內(nèi)容點贊狀態(tài) 
} 

    子線程消息處理:上報用戶操作的消息,把上報結果發(fā)回給主線程

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

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

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

                               2.非一致性,則重新向子線程發(fā)送上報消息.

總結

以上所述是小編給大家介紹的Android 仿微博的點贊功能的實現(xiàn)原理(持續(xù)點贊再取消),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

最新評論