国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

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

2019-10-22 18:14:18
字體:
來源:轉載
供稿:網友

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

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

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

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

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

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

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

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

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

總結

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泰和县| 南木林县| 济宁市| 湘西| 治县。| 贵德县| 峨眉山市| 云浮市| 苏州市| 甘德县| 宁波市| 八宿县| 垣曲县| 遵义县| 临沧市| 武威市| 中山市| 唐海县| 金昌市| 连平县| 榆社县| 申扎县| 邳州市| 平罗县| 宁河县| 龙游县| 从化市| 梧州市| 凤庆县| 嘉鱼县| 宁强县| 屏东县| 林甸县| 景洪市| 宁南县| 闽清县| 五大连池市| 阿拉尔市| 乡城县| 颍上县| 黄龙县|