永远不要期望用户按照你预设的步骤操作 APP

一个新项目刚刚开始推广工作,市场人员向我抱怨用户使用时总会出现各种各样的问题,大部分问题都是因为用户操作不当导致的,但是在用户眼中的结论就是“你们的 APP 不好用”。
举一个例子,有的用户在使用时禁用了 APP 访问移动网络,或者有的用户干脆都没有打开移动数据开关或者 WIFI 开关。但是作为开发人员,我们应该避免用户思考,当用户使用出现问题时,APP 应该能够引导用户前往设置,故有此文。
我们希望当用户网络连接不可用时,及时提醒用户当前的网络状态。当连接恢复时,将提示用的视图隐藏,并且我们希望这个提示视图可以工作在所有需要网络的页面中。
思路如下:使用 BaseActivity ,所有页面继承该文件,在该文件中实现根据网络状态显示提示、隐藏提示。
好了,废话少说,show u the code。

1. 实现监听网络状态变更的广播接收器

我们使用广播接收器接收网络变化的 Intent,这里直接使用静态注册的方法,因为我们不需要在每个页面单独注册这个 Receiver,那太重量级了。

NetworkConnectChangedReceiver.java

事件Event:

判断网络连接是否可用:

静态注册Receiver:

2. 在 BaseActivity中监听事件并处理提示视图

看到 EventBus 的时候你是不是已经知道我的实现方式了(笑 XD),是的就是那个已经很久没人提了的 EventBus。当然还可以使用观察者模式来实现,这样就不用依赖第三方库了,但是我们需要的是快速实现,且对原有代码尽可能少的改动,引入观察者模式显然不如直接拿 EventBus来的方便。

BaseActivity.java

默认所有继承 BaseActivity 的页面当网络状况变化活无网络时都会显示提示,如果某个页面不需要网络状态提示,可以在该页面 onCreate 方法中调用 setCheckNetWork(false) 即可。
由于我全部页面都有一个50dp高度的 toolbar,所以我直接在 R.layout.layout_network_tip 文件中设置了上边距。你也可以在 BaseActivity 中通过方法来设置 mLayoutParams.x = 0;mLayoutParams.y = 0; 来使每个页面动态设置提示的位置。

最终效果如下图:

ToDo

所有页面在网络链接恢复后应该可以自动重新发起网络请求,实现原理其实也很简单,在BaseActivity中增加一个reConnect()的方法,在网络恢复去除提示View的时候调用。在各个页面中重写该方法即可。

【附】相关架构及资料

关注+后台私信“资料”免费获取

unity中app实现拖拽_10分钟让你实现在APP中对网络状态变化进行全局提示相关推荐

  1. Vue的v-for中列表项拖拽排序详细方法

    首先:HTML中,关键点是监听拖拽的三个阶段,即:dragstart/dragover/dragend,注意:要拖拽元素必须加上draggable="true" <ul @d ...

  2. MFC中窗口实现拖拽文件功能

    MFC窗口拖拽文件功能指的是用鼠标将文件拖拽入窗口后,在窗口中可以获取拖拽文件的绝对路径,如图1所示. 图1 文件拖拽功能 实现窗口的拖拽文件功能,首先要将窗口注册为放置拖拽文件的目标,之后在窗口中响 ...

  3. 将OSG嵌入QT窗口系统中,实现拖拽界面

    将OSG嵌入QT窗口系统中,实现拖拽界面 一.原理 OSG底层使用的是OpenGL图形系统,QT也增加了对OpenGL的支持,因此,可以通过QT的OpenGL模块,实现将OSG窗口嵌入到QT中,这样可 ...

  4. vue的移动app项目中,自定义拖拽指令的问题

    使用vue的都知道vue有一个自定义指令,我比较喜欢的就是拖拽的自定义指令,感觉挺方便的! //组件内的拖拽指令 directives: {//组建内自定义指令drag: {// 指令的定义bind: ...

  5. canvas 中的元素拖拽

    实验室要求实现在canvas的元素的拖拽,即在canvas放置一些图标,实现用户拖拽并连线. 需要的知识(1)canvas drawImage方法 function draw(){ var image ...

  6. iview table 自定义列_案例 | iview中Table:拖拽适配列、自定义固定列、合并行

    文 / 景朝霞 来源公号 / 朝霞的光影笔记 ID / zhaoxiajingjing ❥❥❥❥点个赞,让我知道你来过~❥❥❥❥ 0 / 更新Table "iview": &quo ...

  7. MFC中listctrl图片拖拽效果

    CEffectList继承基类clistctrl 程序运行效果如下,使用的VS2013 要注意的地方,假如要将控件拖出窗口以外的地方,需要修改拥有拖拽窗口的属性:m_pDragImageList-&g ...

  8. Element UI表格拖拽(vue中) —— 行拖拽、列拖拽

    目录 安装依赖 vuedraggable 实现拖拽的要点 行拖拽要点 列拖拽要点 完整范例代码 安装依赖 vuedraggable 安装  vuedraggable 的同时,会自动安装 sortabl ...

  9. vue对文件夹进行拖拽上传完整流程(文件夹中超出100个文件)

    前言 上个文章介绍了多图片压缩,多图片可以通过直接多选图片进行拖拽,也可以通过直接拖拽文件夹进行解析得到多图片,接下来直接上代码 先展示文件拖拽后对文件的解析效果 图片文件夹 图片文件夹解析 大文件夹 ...

最新文章

  1. Atitit.安全性方案规划设计4gm  v1 q928
  2. JavaScript语言基础2
  3. python新手教程 从零开始-让你从零开始学会写爬虫的5个教程(Python)
  4. javaWeb项目中获取ip为 0:0:0:0:0:0:0:1
  5. RMQ求区间最值 nlog(n)
  6. 微软北京.NET俱乐部免费活动(2010年7月18日)–Visual Studio 2010 敏捷开发与云计算Azure...
  7. 分区助手找不到盘_C盘的概述与分区
  8. 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务
  9. Linux基础命令---vmstat显示虚拟内存状态
  10. 应用Itextsharp 添加图片到pdf
  11. 自己动手写一个小型的TCP/IP协议
  12. python 之hellow
  13. PHP 实现word在线预览
  14. python控制结束多线程_python进阶八——并发编程之多线程
  15. Zigbee基础理论知识总结
  16. superset:自定义标签乱码解决
  17. 美国佐治亚大学卢国玉老师组招收计算机视觉方向全奖博士生
  18. PWN入门(2)利用缓冲区溢出绕过登录和第一个PwnTools脚本
  19. 【问题解决方案】电脑关闭搜狐微门户的弹窗
  20. Oracle免登录下载JDK(实测有效)

热门文章

  1. 利用pmap查看进程的地址空间
  2. jquery实用应用之jquery操作radio、checkbox、select
  3. Vert.x 发送邮件
  4. sqlserver锁机制详解(sqlserver查看锁)
  5. Android的ViewPager的初步使用
  6. 作为项目经理,如何处理好与不同类型客户之间的关系?
  7. Java调用库文件(JNI)(android对此有所改变)
  8. 使用leangoo做多团队敏捷开发项目管理
  9. 架构与思维:系统容量设计
  10. Java Web开发API Boy如何进阶?