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, 0, userId, aId, state);//把任务加到子线程
        }
        map.put(aId, state);//记录要提交的内容点赞状态
    }

     子线程消息处理:上报用户操作的消息,把上报结果发回给主线程

     主线程消息处理 :  取出map里面对应的值和上报结果比较,

                               1.存在一致性,则移除map中对应的key-value,再断map是否还有消息没有上报,

                                  否则开启定时器,定时把线程终止掉.

                               2.非一致性,则重新向子线程发送上报消息.

     

   

    以上原理非常简单,不喜勿喷,请各大牛多多指教!!!!



        


       

      

你可能感兴趣的:(Android)