/StatusManager

类社交App中赞,关注的状态管理工具

Primary LanguageJava

前言

StatusManager用于关注,赞等状态的同步管理,从Miss项目的开发中总结出来的,进行了模块的解耦。

效果先行

StatusManager

关于StatusManager

在社交类的App,点赞,关注等操作是一个很重要的元素。而在Miss项目的开放过程中,我们也加入了对应功能,设计过程中发现,通过RecyclerView来展示列表帖子,当触发关注操作时,你需要自己维护本地的dataset和界面的更新,并且存在多个子页面的情况下,必须保持多个页面间状态的同步。在实际开放过程中,总结如下:
在RecyclerView来实现的列表展示模块中,当一个状态更新时,可分两部分,即Adapter中的Dataset和RecyclerView中显示的ViewHolder,你可以通过notifyDataSetChanged等类notify方法直接来更新界面,但这样可能会带来当前显示列表出现闪屏等现象。所以需要通过两种方式去更新。另外,不同的页面下进行状态相关操作,涉及到不同线程间的状态同步。这时就需要通过EventBus来进行数据通信,同时使用Rxjava来多个线程切换处理事件,降低主线程的占用率。

模块的设计

todo

如何使用

StatusManager提供了多个接口,对于RecyclerView,可以参考Demo,我已经实现了RecyclerViewStatusManager类,结合RecyclerView,我们需要通过以下几步来完成该模块的部署。

  • 实现IStatusBean,对应状态Bean 该类对于于操作的元数据,即赞,关注,评论,浏览量等状态数据。你需要自己声明一个Bean类,并且实现IStatusBean,该接口提供了匹配状态key和状态类型字段。

  • 实现IStatusAdapter,对应RecyclerView中的Adapter 需要通过Recycler中的Adapter实现该接口,通过该接口提供dataset的相关数据,以及需要更新时的回调。

  • 实现IStatusHolder,对应RecyclerView中的ViewHolder 提供了key,以及更新界面的回调,直接更新ViewHolder的某一view,提高效率。

  • 使用RecyclerViewStatusManager
    传入RecyclerView实例化RecyclerViewStatusManager,在需要使用是调用mStatusManager.register()进行注册,在退出时调用mStatusManager.unregister()进行取消,避免内存泄露。

    @Override
    protected void onCreate(
            @Nullable
                    Bundle savedInstanceState) {
        ……

        mRecyclerView = (RecyclerView) findViewById(R.id.rv);
        ……
        mStatusManager = new RecyclerViewStatusManager(mRecyclerView);
        mStatusManager.setAdapter(statusRVAdapter);
        mStatusManager.register();
    }

    @Override
    protected void onDestroy() {
    	……
        mStatusManager.unregister();
    }
  • 发起更新
    直接通过RecyclerViewStatusManager.post(statusWrapper)发送包装好的Bean。
    StatusWrapper statusWrapper = new StatusWrapper(mFollowBean);
    RecyclerViewStatusManager.post(statusWrapper);