您的位置:首页 > 其它

安卓组件的设计思想

2016-03-23 14:43 267 查看
目录

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: