标签:
standard是活动默认的启动模式,在不进行启动模式的设置的情况下,所有活动都会自动使用这种启动模式。在该模式下,每当启动一个Activity就会在返回栈中入栈,将前面启动的Activity压入到栈内,本身处于栈顶的位置。对于使用standard模式的活动,android系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。
弄段代码对该模式进行深入的体会,我们在布局中加入一个按钮Button,通过该按钮来启动同一个活动,然后观察进栈退栈的情况。创建一个项目LearnLaunchMode;在activity_main.xml文件中输入如下代码添加一个Button:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 tools:context="com.rocking.learnlaunchmode.MainActivity"> 7 <Button 8 android:id="@+id/launch" 9 android:layout_width="match_parent" 10 android:layout_height="wrap_content" 11 android:text="再次启动一个MainActivity" /> 12 </LinearLayout>
然后在MainActivity.java文件中执行启动Activity的操作,代码如下:
1 public class MainActivity extends ActionBarActivity { 2 private Button launch; //声明一个Button组件 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 requestWindowFeature(Window.FEATURE_NO_TITLE); //隐藏标题栏;必须放在setContent()前面 7 setContentView(R.layout.activity_main); 8 Log.i("tag", this + " is launch"); 9 launch = (Button) findViewById(R.id.launch); //获取布局文件中的Button组件 10 //以匿名类的形式添加Button的事件监听器 11 launch.setOnClickListener(new View.OnClickListener() { 12 @Override 13 public void onClick(View v) { 14 Intent intent = new Intent(); //创建一个意图 15 //"显示"意图,第一个参数是一个Context,即当前的Activity,第二个参数是我们要打开的Activity 16 intent.setClass(MainActivity.this, MainActivity.class); 17 startActivity(intent); //启动该意图 18 } 19 }); 20 21 } 22 }
运行该程序,此时已经有一个MainActivity,然后再点击两次Button,继续创建两个MainActivity的实例,在LogCat中可以看到打印信息如下,也就是说有三个MainActivity进入了返回栈。
此时如果我们需要退出程序,则需要点击三次back键,将这些活动出栈。因此,可以画出Standard模式的原理示意图如下:
标签:
原文地址:http://www.cnblogs.com/rocking7189/p/5796638.html