安卓组件的设计思想
来源:互联网 发布:中兴上海研发中心知乎 编辑:程序博客网 时间:2024/06/07 05:41
目录
1.组件化思想
2.组件化设计
3.组件化支持
4.实验
一. 背景
从PC客户端应用程序说起
开发者角度
复杂,同时兼顾UI、交互和业务逻辑
运行载体是进程
进程只有一个入口点—main
使用者角度
流畅的UI、友好的交互、正确的结果
不知进程是何物
PC客户端应用程序开发的任务
满足用户的需求
降低程序复杂度 -- 组件化
PC客户端应用程序组件化之后
开发者角度
运行载体仍然是进程
进程仍然是只有一个入口点—main
使用者角度
流畅的UI、友好的交互、正确的结果
不知进程是何物
结论
应用程序组件化前后,用户对其运行载体(进程)没有概念,但是开发者来说,组件化后的应用程序仍然是和进程直接关联的,也就是说,进程一旦不存在,程序和组件也随之灰飞烟灭!
二 .移动客户端应用程序
与PC客户端应用程序一样,包含UI、交互和业务等复杂逻辑
与PC客户端应用程序一样,用户的需求是流畅的UI、友好的交互、正确的结果
运行在低频率CPU、小容量内存、小面积屏幕设备上
设备特性对移动客户端应用程序的影响
低频率CPU
影响程序运行速度,尤其是程序启动速度,因为用户对程序启动时间最为敏感
小容量内存
影响同时运行的程序的数量,而且系统会在内存紧张时杀进程,以便回收内存
小面积屏幕
单窗口操作模式,导致用户需要频繁地切换程序或者重新打开程序
移动客户端应用程序开发的任务
满足用户的需求
降低程序复杂度
三 .组件化是降低移动端应用程序复杂度的不二选择,但需进一步考虑以下两个事实:
设备特性的影响
系统杀进程时,被杀进程里面的组件如何处理?
程序切换和重新打开时,如可提高程序启动速度?
用户不关心进程
是否可以将组件与进程进行剥离?
四.基本思想
Everything is component
具体实现
程序由组件组成
组件与进程剥离
组件皆程序入口
五.程序由组件组成
Activity:前台交互
Service:后台计算
Broadcast Receiver:广播通信
Content Provider:数据封装
六.组件与进程剥离
组件关闭时,进程可以继续存在
提高重新启动时的速度
进程关闭时,组件可以继续存在
保护被杀进程里面的组件
七.组件皆程序入口
Activity -- onCreate
Service -- onCreate
Broadcast Receiver -- onReceive
Content Provider -- onCreate
八.将组件与进程进行剥离,使得进程对组件透明,听起来很好,但是如何解决以下四个问题?
谁来负责组件的启动和关闭?
谁来维护组件的状态?
谁来管理组件运行时所需要的进程?
组件之间如何进行通信?
九.操作系统级别的组件化支持
Activity Manager Service
Binder
Low Memory Killer
十 .Activity Manager Service
启动组件
组件启动时,检查其所要运行在的进程是否已创建。如果已经创建,就直接通知它加载组件。否则,先将该进程创建起来,再通知它加载组件。
关闭组件
组件关闭时,其所运行在的进程无需关闭,这样就可以让组件重新打开时得到快速启动。
维护组件状态
维护组件在运行过程的状态,这样组件就可以在其所运行在的进程被回收的情况下仍然继续生存。
进程管理
在适当的时候主动回收空进程和后台进程,以及通知进程自己进行内存回收
十一.Binder
为组件间通信提供支持
进程间
进程内
高效的IPC机制
进程间的组件通信时,通信数据只需一次拷贝
进程内的组件通信时,跳过IPC进行直接的通信
十二.Low Memory Killer
内存紧张时回收进程
由于组件与进程是剥离的,因此进程回收不会影响组件的生命周期
从低优先级进程开始回收
Empty Process
Hidden Process
Perceptible Process
Visible Process
Foreground Process
- 安卓组件的设计思想
- android的组件、Intent及设计思想
- Android组件设计思想
- JavaScript组件设计思想
- JavaScript组件设计思想
- 剖析安卓build系统的设计思想以及案例模拟
- 安卓的四大组件
- 安卓的常用组件
- 安卓的通知组件
- 容器及组件设计思想
- 组件/模块设计思想总结
- YARN的设计思想和功能组件简介
- extjs6 基础组件扩展和自定义组件封装--04静态js方法的设计思想
- 安卓MVP设计思想,结合greendao+okhttp通过一个登陆的例子来进行学习(eclipse篇)
- 安卓侧面滑动组件设计(一)
- 安卓侧面滑动组件设计(二)
- 安卓进度条组件ProgressBar的使用
- 安卓动态控制RelativeLayout的组件
- 612 C. Wet Shark and Flowers
- Linux学习笔记--关机和重启命令
- twisted理论基础
- 备忘录模式
- linux路由添加
- 安卓组件的设计思想
- vps搭建vpn详细图文教程,香港主机服务器架设vpn
- javascript基本知识小结--命名空间,函数
- HTTP错误码集合,及错误原因
- Matconvnet在windows8下编译安装过程
- findViewById 返回 null 问题
- Target 'Pods' of project 'Pods' was rejected as an implicit dependency for 'libPods.a' because its a
- Undefined symbols for architecture arm64:问题解决方法
- 集成gitHub的几款常用工具