版权声明:本文为博主原创文章,不得随意转载,转载请注明出处!!! https://blog.csdn.net/YuDBL/article/details/87899301
一、前言
有关Activity的启动模式其实以前做过一些研究总结,好像是13年那会看过前辈mars还是黎活明的视频去了。可以说这也是我们Android工程师面试题中经常被问到的,最近项目有用到就想着把这块知识的代码、笔记给整理一下,废话不多说,如下图这是以前总结的代码,为了方便说明查阅单独写成一篇博文吧!
二、Activity的四种启动模式
1、简介
说明一下:这个任务栈其实就是一个对象,专门用来存放实例的一个对象。当你第一次打开应用的时候,就会新建一个进程,那么进程里面就会开一个任务栈,任务栈是一个对象,它是用来存放Activity实例的。
2、standard模式
步骤1:
Activity的启动模式是声明在清单文件AndroidManifest.xml文件里面的,如下图:
步骤2:
写布局文件main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:id="@+id/textView"
/>
<!--
standard模式:
点击按钮就会再激活activity。执行 openStandardActivity方法
-->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/standard"
android:onClick="openStandardActivity"
/>
</LinearLayout>
strings.xml文件代码
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, MainActivity!</string>
<string name="app_name">LaunchMode</string>
<string name="standard">激活standard模式Activity</string>
</resources>
MainActivity.java文件代码
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView textView = (TextView) this.findViewById(R.id.textView);
//把该对象引用值,显示出来(如果创建新的实例,引用值就会不同)
textView.setText(MainActivity.this.toString());
}
/**
* 此方法在xml文件中,已经注册了点击事件.
* 注:方法的View对象参数不能少
* @param view
*/
public void openStandardActivity(View view){
//跳转激活MainActivity自身。
//点击,启动激活自己,看会不会重用原有实例
startActivity(new Intent(this, MainActivity.class));
//此时MainActivity的启动模式为默认的,即standard模式
//现在我们观察,当点击每次激活,会不会创建新的MainActivity实例,放在stack里面?
//结果:
//你将会看到,每次激活textView显示的引用值都会不同
//即每次都会创建新的MainActivity实例
//验证:
//点击后退键,要点击多次,说明生成了多个Activity界面,
//点击后退键,stack就会依次关掉顶部的activity,
//最后退出,任务stack就被干掉了
}
}
步骤3:
运行程序分析:我们点击按钮,这里我点击三次测试,如下图:
每次该对象引用值都不一样。说明每次激活标准启动模式的Activity,它都会创建一个新的实例。如果你点击后退键你会发现,它会按照出栈规则先进后出,依次显示图3.2、图3.1,直至程序退出,任务栈被关闭。
更新中。。。。。。。