2009-07-03

Android入门笔记(2)


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.

没有评论:

发表评论

爽文

去看了好东西. 坦白说,多少是带着点挑刺的味道去的. 毕竟打着爱情神话和女性题材的气质,多多少少是热度为先了. 看完之后倒是有些新的想法. 某种程度上来说,现在的年轻人或者说声音就像小叶. 只要说点贴心的话就能哄好. 也是那种可以不用很努力了. 留在自己的舒适区避难所小圈子抱团就...