对一个规模较大的App开发团队来说,保持统一的代码规范是个好的事情,同时,保持统一的用户体验规范也是个好的事情。

当用户进入一个页面时,一般会有以下交互场景:
场景1, 初始化loading,页面从server拉取配置信息;
场景2, 初始化成功,页面展现业务UI布局,比如输入框,按钮等;
场景3, 初始化失败,页面从server拉取配置信息出现异常;
场景4, 初始化失败,因为设备的网络连接异常;
5, ……

对于某一个负责某一业务模块的开发人员来说,他可能会有糟糕的用户体验实现:
实现场景1, 当初始化页面的时候,直接展示业务UI布局,然后弹出一个loading对话框,用户可以看到地下残缺不全的UI元素;
实现场景2, 初始化成功之后,dismiss掉第1条的loading对话框,业务UI布局被数据填充;
实现场景3, 因为数据错误初始化失败, dismiss掉第1条的loading对话框,业务UI布局没有数据可填充,残缺不全,甚至状态不对(比如某个按钮需要让server的开关决定是不是点亮状态),然后toast一句错误给用户,之后用户只好退出页面再从入口再次点进来以进行初始化重试;
实现场景4, 因为网络异常初始化失败,同第3条,UI元素没数据填充,状态不对,用户被一句toast打发了,没有重试入口,只能退出页面再来;

对于另一个负责某一业务模块的开发人员来说,他可能会有良好的用户体验实现:
实现场景1, 当初始化页面的时候,页面暂时不展示业务UI布局,而是展示一个加载中的页面;
实现场景2, 当初始化成功之后,切换到业务UI布局,并用数据填充UI;
实现场景3, 因为数据错误初始化失败之后,从加载的状态切换到一个“没有数据”或者“数据错误“之类的页面,并且用户点击页面,可再次重试初始化接口;
实现场景4, 因为网络异常初始化失败之后,从加载的状态切换到一个”网络未连接“之类的页面,并且用户点击页面,会再次重试初始化接口;甚至,监听网络状态,当网络连接后,自动重试;

好,对比之后,我们把第二个开发人员的体验实现当做规范,并要求所有开发人员在业务页面实现过程中都遵守这个规范。
那么问题来了:
1, 业务开发人员工作量增加,上面讲的4个场景都要一一实现;
2, 冗余代码多,上面说的场景,除了第2条,1, 3,4都是一样的代码实现;
3, 场景1, 3, 4的实现没有收敛,以后无法统一修改;

然后,一个抽象的实现来了,BaseActivity, 把场景1, 3, 4都包了,只留下2给业务开发人员去实现。
更多,一般每个页面都有导航栏,导航栏是个通用实现,上面的场景都是针对导航栏下面的区域进行的,跟导航栏没关系,所以这个BaseActivity也把导航栏的实现给承包了,子类透明无感。
子类布局的root view对于BaseActivity来说,只是其布局中的一部分。

BaseActivity要做这些事情:
1, 布局,包含导航栏,以及导航栏下面的4个要切换的布局,包括loading布局、业务UI的父布局、数据错误布局、网络异常布局;
2, 重写所有setContentView方法,子类调用这个方法的时候,把其传过来的view添加到第一条里的业务UI的父布局上;
3, 假定网络请求返回的数据对象是BaseResult,BaseActivity提供protected的一个方法,该方法接收一个BaseResult参数,然后根据其内容自动切换到对应的场景布局下;
4, 提供网络异常和数据错误的点击事件回调给子类,以便子类发起重试;

实现统一用户体验的BaseActivity的更多相关文章

  1. Apple、Google、Microsoft的用户体验设计原则

    轻巧的Apple 注重设计过程: 在设计过程中引入用户交互的5个目标: 了解您的目标客户 分析用户的工作流 构造原型系统 观察用户测试 制定观察用户准则 做出设计决定 避免功能泛滥 80% 方案 优秀 ...

  2. jQuery实现图片预加载提高页面加载速度和用户体验

    我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题呢?首先我们会想到的是提高服务器性能,使用静态缓存等手段来加快图 ...

  3. (转)iOS Wow体验 - 第三章 - 用户体验的差异化策略

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第三章译文精选,其余章节将陆续放出.上一篇:Wow ...

  4. (转)iOS Wow体验 - 第二章 - iOS用户体验解析(1)

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第二章译文精选的第一部分,其余章节将陆续放出.上一 ...

  5. 用户体验 | 寻找成套的 App SDK 服务

    前言 对于开发者来说,三方 SDK 这个词已经是一个不需要任何解释的词语了,然而我想面对琳琅满目的 SDK 产品,大家都会纠结如何选择.那么选择一个 SDK 需要注意哪些问题呢? SDK 的 稳定易用 ...

  6. 第十届Mockplus ▪ UXPA用户体验西南赛区决赛成功举行

    九月的重庆,秋意渐浓. 伴随着凉爽的秋风,第十届Mockplus·UXPA国际用户体验创新大赛(UXD Award2018)西南赛区决赛于9月16日下午在四川美术学院-虎溪校区成功举办.来自西南区域各 ...

  7. web测试总结—用户体验

    一.什么是用户体验 用户体验,英文叫做user experience,缩写为UE,或者UX.一个较常见的定义是“指用户访问一个网站或者使用一个产品时的全部体验.他们的印象和感觉,是否成功,是否享受,是 ...

  8. cnblogs用户体验评价

    1. 是否提供良好的体验给用户(同时提供价值)? 博客园就相当于现在生活中处处可见的微博,所有人都在上面发表自己的一些看法,当然我们比较关注的是计算机编程方面的一些博客,大多数编程人员愿意分享自己的代 ...

  9. “今日校园” App 用户体验分析

    一.背景 为进一步提升信息化应用水平,更好的服务师生,南通大学智慧校园移动端APP“今日校园”定于11月5日正式上线运行.登陆APP可浏览学校新闻.校园生活.各部门微信公众号等内容,查看校内通知.校内 ...

随机推荐

  1. Binder理解

    native takepicture -> camera -> ICamera: class bpbinder: transact -> BpBinder: transact -&g ...

  2. BZOJ 1857 传送带 (三分套三分)

    在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxhgww想从 ...

  3. js/jquery的应用

    1.JS限制文本框只能输入整数或小数 <script language="JavaScript" type="text/javascript"> f ...

  4. Macbook被格式化之后

    macbook不小心被手贱格式化了,开机显示一个大问号. 于是查询得到恢复方式是使用command+R. 照做了,试了好几次,那个地球还是卡住不动的.都没有提示让我输入wifi密码. 于是又查了一下, ...

  5. 基于Calabash-andriod的UI自动化测试(1)-环境和原理

    有时候,一些覆盖happy path的UI自动化还是很有用的.它的一些作用如下: 1.可以迅速实现端到端的功能回归,能够覆盖接口测试覆盖不到的一些地方,如GUI层和接口层的交互产生的问题. 2.非码农 ...

  6. C#汉字转拼音帮助类

    using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressi ...

  7. STM32库函数编程、Keli/MDK、stm32f103zet6

    catalogue . Cortex-M3地址空间 . 基于标准外设库的软件开发 . 基于固件库实现串口输出(发送)程序 . 红外接收实验 . 深入分析流水灯例程 . GPIO再举例之按键实验 . 串 ...

  8. git 代码更新

    第一:先说首次使用 意思就是这个文件夹中的代码你还没有向GITHUB提交过代码 cd /home/test(假如 test就是你的用户名)/githubtest(这是个文件夹,你可以提前先建立好,这个 ...

  9. MySQL插入数据返回id

    按照应用需要,常常要取得刚刚插入数据库表里的记录的ID值,在MYSQL中可以使用LAST_INSERT_ID()函数,在MSSQL中使用 @@IDENTITY.挺方便的一个函数.但是,这里需要注意的是 ...

  10. 主流ORM对比分析,莫人云亦云

    目前主流的ORM框架有Entity Framework,Dapper,NHibernate,NBear,Castle ActiveRecord,BATIS.NET六种,都是免费开源的.下边从官方支持性 ...