Activity的启动模式LaunchMode以及使用场景

版权声明:本文为博主原创文章,不得随意转载,转载请注明出处!!! 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:

运行程序分析:我们点击按钮,这里我点击三次测试,如下图:

图3.1
图3.2
图3.3
图3.4 任务栈

每次该对象引用值都不一样。说明每次激活标准启动模式的Activity,它都会创建一个新的实例。如果你点击后退键你会发现,它会按照出栈规则先进后出,依次显示图3.2、图3.1,直至程序退出,任务栈被关闭。

更新中。。。。。。。

猜你喜欢

转载自blog.csdn.net/YuDBL/article/details/87899301