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的论文. 大意是能对LLM直接更新某些参数来达到控制输出了. 这个放开了想,大致就相当于能定位到某些功能所实际激活/需要的部分. 医学上的等价理解就是知道脑部的特定区域的作用影响了. 工程上来说,一旦变得实际可行就有可能大规模地减少参数和算力需求. 从这...
-
下午查了下关于仿制药的一点东西. 首先是关于一致性定义的相关文件. 简单的Google一般会指向NMPA/国家药监局的一些关于 化学药品注射剂仿制药质量和疗效一致性评价技术要求 的相关政策公告或者是更早期一些的关于这个文件起草意见稿. 一般理解的西药就是指化学药品. 这个文件本...
-
去看了好东西. 坦白说,多少是带着点挑刺的味道去的. 毕竟打着爱情神话和女性题材的气质,多多少少是热度为先了. 看完之后倒是有些新的想法. 某种程度上来说,现在的年轻人或者说声音就像小叶. 只要说点贴心的话就能哄好. 也是那种可以不用很努力了. 留在自己的舒适区避难所小圈子抱团就...
-
看完了一部未完成的电影. 这部片片子比较有意思的是一开始那段自嘲. 秦昊关于既然拍了也播不了,只是私下小圈子里自嗨的事情又什么意义的质问. 片里导演也 讪讪地承认生活的现实. 到这里其实沿着原有的思路,把补拍和一些意外穿插进去,可能还是一个不错的文艺片. 至少于戏里戏外的导演来说...
没有评论:
发表评论