Activity四种加载模式
2016-05-08 22:32
316 查看
android activity四种加载模式,有
》》》standard: 标准模式,这是默认的加载方式
》》》singleTop : task顶单例模式
》》》singleTask : Task内单列模式
》》》singleInstance :全局单列模式
《1》standard: 标准模式,这是默认的加载方式
这段代码运行结果
![这里写图片描述]
this.toString()是当前启动activity的id
this.getTaskId()是当前Task的id
每次点击改变的是当前启动activity的id,不变的是当前Task的id,说明如下图:
《2》singleTop : task顶单例模式
这种模式和standard模式基本相同,但是有差别,那就是如果当前要启动的目标activity已经在Task栈顶的时候,系统不会创建新的目标activity实例,直接用栈顶的activity实例,如果没有位于栈顶,那么就创建新的实例(即使是启动同一个activity)
《3》singleTask : Task内单列模式
这种分为3种情况:
(1)如果要启动的目标activity不存在,系统将会创建目标activity实 例,并把它加入Task顶部
(2)如果要启动的目标activity已经位于栈顶,此时与singleTop模式行为相同
(3)如果要启动的目标activity已经存在,但是没有在栈顶,系统会把这个目标activity栈内上面的所有Activity移除Task栈,那么相当于当前activity位于栈顶了。
《4》 singleInstance :全局单列模式
这种模式下,系统保证无论从哪个Task中启动目标Activity,只会创建一个目标Activity实例,并且会使用一个全新的Task栈来加载该Activity实例。
这个分为两种情况:
(1)如果要启动的目标activity不存在,系统会先创建一个全新的Task,再创建目标Activity实例,并且把它加入新的Task栈顶。
(2)如果要启动的目标activity存在,无论它位于哪个应用程序中,无论它位于哪个Task中,系统会把该Activity所在的Task转到前台,从而使该activity显示
》》》standard: 标准模式,这是默认的加载方式
》》》singleTop : task顶单例模式
》》》singleTask : Task内单列模式
》》》singleInstance :全局单列模式
《1》standard: 标准模式,这是默认的加载方式
public class StandardTest extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); this.setContentView(layout); // 创建一个TextView来显示该Activity和它所在Task ID。 TextView tv = new TextView(this); tv.setText("Activity为:" + this.toString() + "\n" + ",Task ID为:" + this.getTaskId()); Button button = new Button(this); button.setText("启动StandardTest"); // 添加TextView和Button layout.addView(tv); layout.addView(button); // 为button添加事件监听器,当单击该按钮启动StandardTest button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.v("aa", "aaaaaaaaaaaaaaaaaaaaaaa"); Toast toast = Toast.makeText(StandardTest.this, "hahahha", Toast.LENGTH_LONG); toast.show(); // 创建启动StandardTest的Intent Intent intent = new Intent(StandardTest.this , StandardTest.class); startActivity(intent); } }); } }
这段代码运行结果
![这里写图片描述]
this.toString()是当前启动activity的id
this.getTaskId()是当前Task的id
每次点击改变的是当前启动activity的id,不变的是当前Task的id,说明如下图:
《2》singleTop : task顶单例模式
这种模式和standard模式基本相同,但是有差别,那就是如果当前要启动的目标activity已经在Task栈顶的时候,系统不会创建新的目标activity实例,直接用栈顶的activity实例,如果没有位于栈顶,那么就创建新的实例(即使是启动同一个activity)
《3》singleTask : Task内单列模式
这种主旨 **是同一个Task内只有一个实例** 学习的时候要注意这点
这种分为3种情况:
(1)如果要启动的目标activity不存在,系统将会创建目标activity实 例,并把它加入Task顶部
(2)如果要启动的目标activity已经位于栈顶,此时与singleTop模式行为相同
(3)如果要启动的目标activity已经存在,但是没有在栈顶,系统会把这个目标activity栈内上面的所有Activity移除Task栈,那么相当于当前activity位于栈顶了。
《4》 singleInstance :全局单列模式
这种模式下,系统保证无论从哪个Task中启动目标Activity,只会创建一个目标Activity实例,并且会使用一个全新的Task栈来加载该Activity实例。
这个分为两种情况:
(1)如果要启动的目标activity不存在,系统会先创建一个全新的Task,再创建目标Activity实例,并且把它加入新的Task栈顶。
(2)如果要启动的目标activity存在,无论它位于哪个应用程序中,无论它位于哪个Task中,系统会把该Activity所在的Task转到前台,从而使该activity显示
相关文章推荐
- @staticmethod @classmethod @property使用【1】
- HDU2087 剪花布条
- PAT乙级—1024. 科学计数法 (20)-native
- 第一阶段绩效评估
- 用oracle语句计算百分比
- 机器学习第九周作业使用R语言建立BP神经网络
- C#下listview如何插入图片
- 基于struts2的留言板系统&简单实现jdbc分页
- mariadb卸载
- 20145302张薇《Java程序设计》第十周学习总结
- 20150408--Sphinx+邮件激活-01
- OpenCV将连续图片合成视频AVI
- 学习PS基础教程
- Android之Activity
- Hibernate的关联映射之N-N关联映射 .
- scikit出现Reshape your data either using X.reshape(-1, 1) if your
- Java StringBuilder 和 StringBuffer 源码分析
- Android屏幕适配攻略
- 日志框架的宏观设计
- hdu3966 Aragorn's Story【树链剖分+线段树】