Android将一个application肢解为若干个activity,或者说,直接让编程人员从用户操作的角度去编写程序.本着软件工程可重用性原则,一个个的activity必然会发展为组件式的存在,也许不很严格.
那么,从另一个角度来说,一个组件也算是一个application,因为它也完成了一个功能.而实际上,在android中,也确实没有对application中activity的数量有所限制或者说规定.
于是,application似乎只是一个比较虚拟的存在,一个activity的集合罢了.
但是,注意到android的编程模型,是1app1进程1用户1JVM的.
也就是说,物理上还是存在着application的.
如果按照上面对application,即application只是一些activity的集合的话,那么架空application这层,或者说去除application这个概念可能更合适.
但如果去除的话,又使得1app1进程1用户1JVM的原则变得无意义了.
所以,application必须存在,必须保存一个应用是实际的独立个体.
但是,这样的话,activity的自由组合这个先天优势不是也丧失了么?
为此,就有了task的概念.
task实质是也是一个activity的集合或者称之为容器.只不过特殊在它是一个堆栈式的存在,一个activity call了另一个activity之后,就会将那个activity置于堆栈上层.
相对于application来说,task是一个比较动态的存在.
打个比方,application是一个exe,而task则是dll.
application在开始就定义好了所有的资源,而task的话,可以再允许的情况下调用其他东西.
某种程度上说,task是动态生成的application.
不同的task里的activity是由affinity来区别的.某种程度上来说,affinity是task的ID.注意到这个ID是可重定的.感觉Dev Guide的说法,这是由activity的allowTaskReparenting属性决定的.
顺便提一句,android的的开发倒是挺象web的.
activity在task中的表现,或者说加载方式主要有四种:
1.standard(the default mode)
2.singleTop
3.singleTask
4.singleInstance
值得一说的是,android对activity stack的处理让人想起了Erlang的一个思想,就是多线程环境下,如果不能很好地解决锁,那么就让锁消失.Erlang的作法是让没个变量都只能用一次,也就是说,每一次操作的变量其实都是新的.
在android中的task里,一般来说(standard mode),没一个intent发过来之后,都会产生一个新的activity来响应这个intent,就像Erlang一样.
而singleTop mode则是对standard mode的一个特殊处理,即,保持stack顶端的那个activity.也就是说,如果一个intent是由stack顶端的activity处理的话,将不会新建一个新的activity来处理,而是由原来的那个activity处理.
singleTask mode则是对于这个activity则会新建一个task.也就是说,对于这个activity,会分配一个新的affinity.
singleInstance mode则是保证这个activity唯一.这个对于1app1进程1用户1JVM模型来说,就像是引入了一个static变量.
既然对初始加载的过程有所规定,那么也就很自然地会有结束过程的一些规定.
类似垃圾回收,android对acitivity的退出机制也有一些设计.也是跟task有关,acitivity在退出的时候,必然会影响到task的stack,因此,android对acitivity的行为方式也做了规定.
1.alwaysRetainTaskState属性.保证stack不变.默认状态下,一个task长期不活动的话,会退化到root activity,也就是弹出stack,只保留底部的一个acitivity.
2.clearTaskOnLaunch属性.这个会在acitivity加载的时候清空task的stack.
3.finishOnTaskLaunch属性.某种程度上说这个属性保证了某项task是唯一的.因为当一个同类的task加载的时候,如果此属性为true,那么就会先退出之前的task,然后再加载这个task.
2009-07-03
Android入门笔记(2)
订阅:
博文评论 (Atom)
注意力经济
昨天翻了下Google的季报. 发觉传统广告模式确实在当下存在相当的危机感. 虽然从数据上来说这块的revenue还是增加的. 但是看cost per impression和impression数据是不容乐观的. 叠加TAC的增加. 基本就是典型的买量越来越贵,同时收效越来越低的...
-
从未对雪有过什么幻想. 于是,当这雪终究下下来了,也没什么特别的兴奋. 只是,由于是南方人,也就姑且好奇了一番. 望了望着属于别处的风景. 也许是因为昨晚下过雨,也或许是本来就会如此. 冰混着点积水,倒是怀念起阳光灿烂的日子了. 面对着这未知的...
-
去看了长安的荔枝. 前半段还可以,尤其像荔枝林里不知道是笑还是哭的几个镜头表演算是相当出色了. 结合人物背景的那种对目标的绝望与对当下人际环境的希望的交叉矛盾心理. 后半段就有些过滤潦草了. 如果说整片是对于一骑红尘妃子笑,无人知是荔枝来的解构的话. 带入民生潦倒涂炭这点是没问题...
-
看完了一部未完成的电影. 这部片片子比较有意思的是一开始那段自嘲. 秦昊关于既然拍了也播不了,只是私下小圈子里自嗨的事情又什么意义的质问. 片里导演也 讪讪地承认生活的现实. 到这里其实沿着原有的思路,把补拍和一些意外穿插进去,可能还是一个不错的文艺片. 至少于戏里戏外的导演来说...
没有评论:
发表评论