【干货】Android应用架构笔记
来源:互联网 发布:php面向对象的封装 编辑:程序博客网 时间:2024/06/07 02:30
视频见:https://www.youtube.com/watch?v=BlkJzgjzL0c&feature=em-subs_digest
印度哥们的发音每次都能让我一阵沉醉。
尽快行动
- 早期的设计抉择对app的影响很大
- 基本架构会让你思考需要解决的问题变得更容易或困难。
哪种模式?
- MVC
- MVP
- Reactive
- Cairngorm
- Flux
- fdsafdsa
- MVVM
- CLEAN
这不是一个库的调查
- 很多很棒的libraries展示了思考app的不同方式
- 趋势迅速改变,但一些挑战是永恒的
- 久而久之“熔岩流”发生了
Lava Flow 熔岩流:解释一下,大致就是说一些因为种种状况写得不太好的代码,恩,比如产品/PM/某些开发老大等呵呵呵催进度的时候,被加入到实际生产环境,而其实际仍处于开发中的阶段,导致后期需要维护原先未完成状态的设计的兼容性,比如各种API/命名等。而在这种team里面,随着熔岩流的不断发生,人员的进进出出变动,系统内部各种设计的目的丢失,导致之后的工程师不仅不敢清理这些代码,反而只能继续增加它们的复杂性,把系统弄得越来越混乱。
如果你有一定工作经验,相信对这种状况一定不会陌生。:-D
为了用户体验(UX)的架构
用户不会关心你系统的架构,他们只在意用户体验。
接着我们看到了一个IM app的例子,用户发送了一个消息,然后就看到菊花转啊转,用户并不知道发生了什么。
非持久化的提示
见下图,view发送命令给view controller,然后controller请求网络,并等待网络response再更新view。
这样就会让用户觉得体验很差劲,如果我们试着再增加一个Model层(存储),如下图,当用户点击后,view controller并不会直接发送请求,而是先更改Model层状态,Model会先把更新后的状态回调给View Controller,更新View的UI,然后才去发送网络请求,并等待response,然后再次更新UI(其实这里的Model就是Repository层了,对上面屏蔽了数据来源,UGC/FEED流的app中这种体验很重要)。
这种设计下,我们就很容易可以造一种假feed(比如真实的是黑色,假的是灰色),等到网络response回来了,再变成真feed(黑色)。
这就是非持久化的提示。
缓存
第二个例子,当我们从详情页退出回到列表页,然后再次点击列表项进入刚才的详情页,数据竟然不见了。2秒前我还在这里,为什么当我再次回来的时候数据就没了呢。
因为数据不是持久化的!它只是一个短暂的存储,数据来源是网络。
于是我们就得到了上图这样的设计,这样一来我们一进页面就能看到数据,因为数据来自本地,Application Logic会在收到View Controller请求的时候同时请求Persistent Model和Network。
非持久化提示队列
再来个神奇的场景,见下图,当用户输入一条信息后,UI展示了假数据,但当他继续输入后,却没有更新新的假数据到界面,这其中发生了什么呢?
因为我们的架构是基于命令的!见下面的后台处理示意图:
当我们处理请求的时候,我们同时只能做2件事(想象一个一个max为2的线程池),当我们在一个线程抓取bitmap,另一个线程发送数据到服务器的时候,我们无法处理第三个命令(比如从磁盘读取评论)。这是一种很糟糕的情况,调度的优先级有问题,但设计者很难料到这种情况的发生,因为并不知道每一个命令要花多久,你并不能总是估算出来。
但我们可以分开这些东西。
见上图,我们把队列分为网络和本地队列,这样就不会出现刚才的情形了。就算网络出了问题,用户还是能看到本地的假反馈。
未完待续。。。。。。。。。。
关注下面二维码或者在微信中搜索公众号ID:appjiagou,关注后回复“全文”获取全文阅读!
- 【干货】Android应用架构笔记
- Android应用架构笔记
- 【干货】测试Android应用安全性
- Android的架构和应用组件-笔记
- <Android 应用 之路> 干货集中营 ~ GankIOClient
- [干货] 【译】Android 开发规范与应用
- 干货 | 彻底理解ANDROID BINDER通信架构(上)
- Android应用UI架构
- Android应用架构
- Android应用UI架构
- 【译】Android应用架构
- Android应用架构
- 【译】Android应用架构
- Android应用架构概述
- 【译】Android应用架构
- Android应用架构
- Android应用开发架构
- Android应用架构
- H-Index II
- LUA———Lua和C 区别
- 多线程下载断点续传
- DHTML技术:表单验证<form>
- 图的基本算法
- 【干货】Android应用架构笔记
- 初学ML笔记N0.1——线性回归,分类与逻辑斯蒂回归,通用线性模型
- SIP Call Flow - Registration
- Docker 从零开始制作基础镜像[centos]
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- CXF服务器发布,客户端调用
- RxJava 使用debounce操作符 优化app搜索功能
- 关于开发环境配置的一点小感想
- 安卓生成EAN13