对一个规模较大的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. plupload 如何控制最小宽度和文件类型及跨域

    直接上代码 plupload.addFileFilter('min_width', function (maxwidth, file, cb) { var self = this, img = new ...

  2. B树、B-树、B+树、B*树

    B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right) 2.所有结点存储一个关键字 3.非叶子节点的左指针指向小于其关键字的字数,右指针指向大于其关键字的字数: 如: B树的 ...

  3. Mysql完全手册(笔记一,底层与内置函数)

    1.MySQL由五个主子系统组成.协同工作,这五个主子系统是: (1)查询引擎 (2)存储管理器 (3)缓冲管理器 (4)事务管理器 (5)恢复管理器 查询引擎: 这个子系统包含三个相互关联的部件: ...

  4. 通过xshell远程连接ubuntu

    ubuntu开启sshd服务SSH分客户端openssh-client和openssh-server如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果 ...

  5. Convertion of grey code and binary 格雷码和二进制数之间的转换

    以下转换代码摘自维基百科 Wikipedia: /* The purpose of this function is to convert an unsigned binary number to r ...

  6. IT行业的技术类岗位分为许多种,如何判断自己适合哪种?

    A.硬件工程师B.软件工程师C.UI设计师D.仿真工程师E.ERP工程师F.集成工程师G.系统架构设计师H.数据库工程师I.网络管理员J.网络安全工程师K.网站架构设计师L.网页设计M.Flash设计 ...

  7. win7 cmd 操作mysql数据库

    一 ,对MySql服务器的开启,重启,关闭等操作       当然,可以在win7的界面环境下,关闭或开启MySql服务.但是经常找不到win7的服务管理器,主要定位方法有二:命令行下输入servic ...

  8. HIbernate的property-ref属性

    为公司之前的一个公交卡系统修改bug: 通过排查发现, 卡类型表和卡等级表是一对多的关系, 但是卡等级表中没有字段引用卡类型表的主键,而是引用了卡类型表中非主键的另外两个字段 通过查看hibernat ...

  9. 利用ucenter整合discuz数据

    由于项目需要,需要用到discuz论坛用户的数据,所以想到利用ucenter获取数据.以下为整合ucenter的过程. 1.首先你需要下载官方demo:http://faq.comsenz.com/l ...

  10. PRINCE2

    首先要说的是,我这篇体会是针对一定的背景的,不能算是一种通用的管理方式,只能是我自己的经验总结,能给大家平常的管理提供一点思路,我就很满足了.先说说背景,我所在公司做的是大型桌面应用软件,简单点说就是 ...