深入Activity
Android使用直接的用户语义来表达所有的顶层概念。比如Activity.
Activity除了是一个任务划分单位或者说内存单位(到现在为止仍然没有真正研究过Android在进程管理与GC以外对Activity的专有内存管理)以外,更多的是一个交互的单位。或者说,从一开始这一点就一直排在最重要的地位。甚至,它其实才是最初的也就是说是Android哲学的真正起点:Activity是先于内存管理或任务划分这样的概念的。
又或者说,正是通过将这个应用程序的最小单位收缩到仅与用户可见的活动相关,才更好地或者说完美地达到了完成后面的内存管理任务的愿景。
前文提过,真正在运行的永远是线程,进程这些东西。这是计算机世界中的真理,到哪都不会变。至少目前是不会变。
永远不要把Activity与运行联系起来或扯上任何关系。Activity它只是一个概念,或者说只是一个哲学。它是一个识别单位。它是一种认识。是一个个体。
它是形式。
只能活在认识中。它活在Android世界的认识论或者说认识模型中。
它其实很象J2EE里面的Servlet, EJB这样的东西。或者说虚拟机进程里面的对象。Android则是一个这样的框架,它里面的工作分成两部分:容器(即框架)的工作与程序员的工作。而ACTIVITY与SERVICE等等这样的东西,就是划分这两种工作的那条线。ANDROID负责线这边的工作,而我们负责线那边的工作。我们的合作模式就是以这些API为基础的。尽管ANDROID并不称这些东西为API,但其实它们就是。
ANDROID是这样的,它把一切都叫做API。但我觉得这里面其实有两个级别的API,是很有必要区分开来的:向上的API与向下的API。向上的API指那些受容器管理的API,被容器调用的API。而向下的API是那些是用来被应用程序调用的API,只是用来完成一定工作的API。两者的调用方向完全相反:一是ANDROID调应用,一是应用调ANDROID。在第一种中,ANDROID叫它们做CALLBACK。我觉得这是C的思想,这也是ANDROID唯一不如J2EE的地方。J2EE在思想上比它们要纯正得多。ANDROID是一个优秀的操作系统,但却不是一个标准,我想这就是原因。毕竟GOOGLE与摩托这样的企业,与SUN比还是差得非常远。都是90后,SUN里面都是些什么人呢?50后?60后?...anyway. it's not my business!
所以,哲学上最好的办法便是把它看作客户端的EJB,或SERVLET。这样一来,万一你要写什么面向对象的应用,两头都有东西。事实上现在的ANDROID在某个程度上已经可以被看成一个标准,或者说,如果考虑HTML5的话,鬼知道什么才是标准。所以说ANDROID是个非常失败的项目,从学术或行业的角度来看的话。因为好象它从来就没有考虑过,比如,在客户机上也同样可以实现一定程度的标准的话,今天的软件界是不是会有些不同呢?比尔又会不会被吓得连 裤子都丢下来呢?
好象有点越说越大了。不说了,回到主题。
要讨论Activity,就必须不可能离开UI。因为事实上 ,Activity就是为了UI而设计的,或者说它本身就来自UI本身的哲学。或者说它就是UI。但是UI到底是什么东西呢?当应用onStop的时候又到底发生了什么呢?
在容器中,组件始终都是被动的。Activity如此,UI同样如此。事实上,UI本身跟编程没有任何关系。比如我问你,到底什么才是程序呢?UI肯定不是吧。那UI又“是”什么呢?
其实UI什么也不是。为什么这么说,因为程序是要用来运行的,程序是代码。对象也是代码,对象也是要被运行的。但UI不是,UI不能用来运行,恰好相反,它是程序运行的结果。它是I/O的结果。
还记得处理器有几种指令不?运算,内存,I/O。现代处理器指令类型肯定不只这些,但基本结构是不会变的。冯诺依曼就是这样子的,谁也改变不了这个目前。
UI不属于程序。即使程序中存在某些UI元素如VIEW,VIEWGROUP等等,那些也还是程序。它们是这样的程序:它们的存在,是为了得到UI这个结果。所以它们还是属于运算,而UI,则还是结果。
ACTIVITY是ANDROID中唯一能绑定UI的组件,也是ANDROID中唯一的UI操作对象。这意味着,在ANDROID FRAMEWORK这个容器中,唯一与UI有关的东西就是ACTIVITY。这是ANDROID的哲学。事件送给ACTIVITY,显示交给ACTIVITY,并且还要禁止多线程的UI更新。因为它认为只有ACTIVITY才与UI有关,才应该进行UI运算,而且它已经这么做了,再允许别人的加入恐怕事情就会乱套,所以要禁止它。
所以说,在ANDROID里面写程序,要有“世界”观,要把它的组件物化。因为这就是设计者本来的思想。一定要有拜物的精神,一定要建立一套正确的(设计者的原始)哲学。不然就很容易因为错误的理解而犯错误的错误。
更多相关文章
- Android(安卓)Accessibility 辅助功能简单介绍
- 3.系统运行库
- 开发可统计单词个数的Android驱动程序(3)
- 【转】android自带的软件或者服务
- Google提供更好的Android应用程序翻译服务
- Android中Service概述
- Android(安卓)Studio运行Hello World程序
- Android(安卓)Q 不叫 Q,正式命名为 Android(安卓)10
- Android应用程序换肤实现系列(四)