LauncherMode
1, android中,以Task为中心来管理Activity,Acitivity在Task中以栈的形式保存。
2, Activity的加载方式有以下几种:分别通过测试来验证。
准备:
创建:
MainActivity:Button:ToSecond跳转至SecondActivity
SecondActivity:Button:ToThis跳至至本身即SecondActivity,Button:ToThird跳至ThirdActivity
ThirdActivity,Button:BackSecond跳回SecondActivity
重写(override):
Activity的onCreate()方法和ondestroy()方法
添加:Log
运行此android项目:初始页为下图:
a) LauncherMode:stardard:(即默认Activity加载模式)
为清晰起见,可以先注释掉ondestroy()方法
打开配置文件:AndroidManifest.xml文件,如下图,添加LauncherMode配置文件
Step1:点击Button:ToSecond:(新创建)
Step2:点击Button:ToThis(增加)
Step3:点击Button:ToThird(无增加)
Step4:点击Button:BackSeocnd(增加)
总计创建3次,显然这对于系统是一种很大的浪费。
b) LauncherMode:singletop
同样的位置,修改LauncherMode:singletop 特点:如果它在栈顶,则它不新创建
为看清楚清除的效果,添加ondestroy()方法,同样的方法处理ThirdActivity,重写onCreate(),onDestroy()并添加Log
Step1:点击Button:ToSecond:(创建Second)
Step2:点击Button:ToThis(无增加),因为Second在栈顶
Step3:点击Button:ToThird(无增加)
此时Task栈中的activity排列如下图:左图:
Step4:点击Button:BackSeocnd(增加)
见上右图,栈顶为Third,故创建Second
c) LauncherMode:singletask::只要栈中有就不创建,并且当加载r singletask Activity时,会destroy其上的activity。
Step1:点击Button:ToSecond:(创建Second)
Step2:点击Button:ToThis(无增加),因为栈中存在
Step3:点击Button:ToThird
Step4:点击Button:BackSeocnd(由c的图可知,Third被清除)
d) LauncherMode:singleinstance
此时只要全局(系统)中有此Activity,则不会创建,
修改配置文件中的launcher为singleinstance
此时,测试需要新建另外一个项目,由新项目(以项目1,项目2区别)跳至原项目Second。通过Action。
为了测试方便,新项目的icon不要使用默认:修改为其他照片,地址在配置文件的如下部位,配置icon即可:
项目2中使用隐式意图跳转:
Step1:安装项目2,运行即可,到达应用程序页面看所选图标是否有,即代表项目2是否安装成功
Step2:运行项目1,点击Button:ToSecond
Step3,返回桌面,点击项目2图标,进入,点击Button1,跳转至项目1启动Second。
没有新创建,故在全局中有,即不新创建