标签:
android 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显示
标签:
原文地址:http://blog.csdn.net/qq_21383435/article/details/51348277