业务场景
ezgif.com-video-to-gif.gif
3个界面中有3个独立控件,需要同步他们的状态,即其中任一控件状态变化,其余两个随之而变。
解决方案
1. 传递值:startActivityForResult() + onActivityResult()
这是最容易想到的方案,实现步骤如下:在界面A将控件状态封装在Intent中
在界面A通过startActivityForResult()跳转到界面B
在界面A返回之前通过setResult()将控件状态返回给界面A
在界面A的onActivityResult()中获取控件状态并更新UI
但该方案有缺点:代码可读性较差,特别是当onActivityResult()中还夹杂着其他业务逻辑。
增加了Activity间的耦合(即Activiy B依赖于Activity A的特殊传值方式,Activity A依赖于Activity B的回传值)。因为界面间是两两耦合的,所以也导致了扩展性较差,如果需求改成“从Activity A直接跳转到Activity B”,需要重新出处理Activity A到Activity B的跳转逻辑。
2. 共享值(持久化)
既然通过传递值的方式不够好,那直接“共享值”呢?即将每次状态改变都持久化(存在本地),每次绘制界面都从本地读取状态。
设想界面A中有一个列表,每个表项都包含一个需要状态同步的控件,当服务器返回一批新数据后,需要挨个将数据进行存储,随着列表不断刷新,本地存储的内容就不断增多,为控