您的位置:首页 > 其它

Activity四种加载模式

2016-05-08 22:32 316 查看
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显示
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: