Activity启动模式的研究

本文详细介绍了Android中Activity的四种启动模式:standard、singleTop、singleTask和singleInstance,通过实例解释了每种模式的特点及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

activity一共有四种启动模式,启动模式和Task密切相关

1,standard,一个Task中可以有多个相同类型的Activity(不是同一个Activity对象),例如一个Task中有A,B,C三个Activity,如果再启动A类的Activity,则Task中的顺序就为A,B,C,A。standard为activity的默认启动模式。


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

	private static final String TAG="MyTestActivity";
	private TextView text;
	private Button btnClick;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		text=(TextView) findViewById(R.id.text);
		text.setText(this.toString());
		btnClick=(Button) findViewById(R.id.click);
		btnClick.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent=new Intent(MainActivity.this,MainActivity.class);
				startActivity(intent);
			}
		});
		
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}






2,   singleTop,在AndroidManifest.xml文件中将MainAcitivity的启动属性 android:launchMode="singleTop">

可以发现,点击多次按钮,TextView中显示的ID始终是一样的,这也证明,当Task栈顶所代表的是要找的activity时,就不会再去生成新的实例。如果栈顶的activity不是设置了此属性,那么即使task中已经有了该activity,照样会生成一个新的此类的实例。


3,   singleTask

如果activity启动模式设置为此属性,那么在一个Task里面只有一个此Activity的实例,如果此activity不在栈顶,那么就将此activity之上的其他activity统统出栈,使此activity位于栈顶显示出来。

4,   singleInstance

启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入,

从FirstActivity跳转到SecondActivity时,重新启用了一个新的栈结构,来放置SecondActivity实例,然后按下后退键,再次回到原始栈结构;图中下半部分显示的在SecondActivity中再次跳转到FirstActivity,这个时候系统会在原始栈结构中生成一个FirstActivity实例,然后回退两次,注意,并没有退出,而是回到了SecondActivity,为什么呢?是因为从SecondActivity跳转到FirstActivity的时候,我们的起点变成了SecondActivity实例所在的栈结构,这样一来,我们需要“回归”到这个栈结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值