对一个规模较大的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. python高级之操作数据库

    python高级之操作数据库 本节内容 pymysql介绍及安装 使用pymysql执行sql 获取新建数据自增ID fetch数据类型设置 1.pymysql介绍及安装 在python2中连接数据库 ...

  2. AngularJS之开发组件的一些思路

    欢迎大家指导与讨论 : ) 一 .前言 由于笔者水平有限,在这里只是分享自己开发组件的一些思路~ 摘要:无UI组件类.有UI组件类.有UI组件类型2.欢迎拍砖吐槽 O(∩_∩)O 二 .无UI组件类 ...

  3. Linux下安装VMware Tools 的方法

    1.按下 CTRL + ALT  组合键,进入主操作系统,点击VMware虚拟机菜单下的安装虚拟机工具子菜单. 菜单:VM->Install VMware tools....(虚拟机->安 ...

  4. 【swift学习笔记】三.使用xib自定义UITableViewCell

    使用xib自定义tableviewCell看一下效果图 1.自定义列 新建一个xib文件 carTblCell,拖放一个UITableViewCell,再拖放一个图片和一个文本框到tableviewc ...

  5. 【原】python中文文本挖掘资料集合

    这些网址是我在学习python中文文本挖掘时觉得比较好的网站,记录一下,后期也会不定期添加:   1.http://www.52nlp.cn/python-%E7%BD%91%E9%A1%B5%E7% ...

  6. 编译安装apache

    1.安装依赖库:“Development  Tools”  “Server Platform Development”  pcre-devel 2.安装apr,apr-util 从yum源安装或去ap ...

  7. Thinking in java学习笔记之String的不可变性

    为了提高效率,可以使用StringBuffer或StringBuilder 1. 在执行速度方面的比较:StringBuilder > StringBuffer 2. StringBuffer与 ...

  8. Web Analytics 2.0 中文翻译 [ 系列索引 ]

    引言 内容概述 第一章:网站分析2.0的新奇世界 第二章:选择你的网络分析灵魂伴侣的最佳策略 第三章:点击流分析的奇妙世界:指标 第四章:点击流分析的奇妙世界:实际的解决方案 第五章:荣耀之钥:度量成 ...

  9. 81.Android之沉浸式状态栏攻略

    转载:http://blog.csdn.net/lmj623565791/article/details/48649563/ 一.概述 近期注意到QQ新版使用了沉浸式状态栏,ok,先声明一下:本篇博客 ...

  10. Typescript Mixins(混合)

    除了惯例的面对对象的思想,另一种较流行的通过可复用组件创建类的方法是将简单的类混合到一起.你可能对这种混合的方式比较熟悉或对Scala语言的特性有理解,这种模式在JavaScript社区也有一定的人气 ...