Android学习笔记——Activity活动(上)

安卓开发新手,写个学习总结!!!

学习Android开发也有一段时间了,也看了不少这方面的学习书籍,里面的开篇基本上都是从Activit这块说起。而Activity也是Android开发中最重要的一部分。

1、Activity(活动)的创建。

在刚开始学的时候,创建一个活动有三个步骤:

(1)先创建一个类,继承AppCompatActivity。然后调用里面的onCreate方法,在之后就是设置布局文件调用setContentView函数

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

(2)创建R.layout.activity_main布局文件

(3)在配置清单中的application中添加activity

<activity android:name=".MainActivity">
            <!--这个为意图过滤器-->
            <intent-filter>
                <!--这个是用来设置app启动后显示的第一个主活动-->
                <action android:name="android.intent.action.MAIN" />
                <!--这个是可以让app应用在手机上能够显示出来-->
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

不过在后来的学习中,我也找到了一个快速创建活动的方法

2、活动的生命周期

我之前在网上查这方面的资料和在书上看到的大多数的生命周期图是这样的

这个活动的生命周期先是会先走onCreate()方法,然后就是走onStart()方法,接着就是onResume()方法,程序走到这里后基本上手机上面就已经有了显示了,也可以对手机中的控件进行操作。

如果这时候在这个活动者跳转到了另外一个活动,便会是下面这张图这样

在这张图中可以看到,onCreate方法只会在创建活动的时候调用一次,后面的话只会再次调用onStart()方法和onResume()方法。我自己之前在做项目的时候还没太在意这个生命周期的问题,结果就吃了大亏,以为活动在每次从跳转出去后,再返回回来都会再走一次onCreate()方法。

3、Activity的四种启动模式:

首先来谈启动模式的概念,启动模式能决定新的Activity实例是否重用已存在的Activity实例,是否和其他Activity使用共用一个task。

而task是一个具有栈结构的对象,一个task可以管理多个Activity,每启动一个应用便会创建一个与之对应的task任务栈。

<activity android:name=".MainActivity"
            android:launchMode="standard">
            <!--这个为意图过滤器-->
            <intent-filter>
                <!--这个是用来设置app启动后显示的第一个主活动-->
                <action android:name="android.intent.action.MAIN" />
                <!--这个是可以让app应用在手机上能够显示出来-->
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
  </activity>

(1)standard标准模式:

该模式为默认模式,每次激活Activity的时候,都会创建一个Activity实例,并且放入任务栈中。

可以看到,我在这里跳转了,两次,第一次跳转到第二个activity,第二次又跳转回了MainActivity,Task任务栈中原本就已经有了MainActivity的实例,但是因为是standard标准模式,所以还是会创建新的MainActivity调入task中,按返回键的时候所以也就结束了3层的Activity。

(2)singleTop模式:

在这种模式中,如果任务栈中某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不会创建一个新的Activity,其他的情况就会要创建新的Activity实例

可以看到,因为是singleTop模式,如果跳转的Activity是当前的Activity的话,就不会创建新的Activity,而是直接从task中调用本身。

(3)singleTask模式:

如果要激活的那个Activity在任务栈中存在该实例,则不需要创建新的,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都移除栈。也就是说,如果一个app中有MainActivity、SecondActivity、ThirdActivity这三个活动,而SecondActivity设置的是singleTask模式。

首先从MainActivity跳转到SecondActivity中,因为SecondActivity在task中还没存在,所以还是会创建一个新的SecondActivity实例,然后再从SecondActivity跳转到ThirdActivity中。最后再从ThirdActivity跳转到SecondActivity。此时,因为SecondActivity设置的是singleTask模式,虚拟机会先从task中判断是否存在该实例,发现已经有了,就不会在接着创建新的SecondActivity实例,而是直接调用这个实例,把ThirdActivity从task任务栈中移除,此时task任务栈只有MainActivity和SecondActivity两个实例。

(4)singlelnstance模式:

该模式中只会有一个实例,并且这个实例独立运行在一个task找那个,这个task只有这一个实例,不允许有别的Activity实例存在。

这个也很好理解,因为虚拟机在开始运行时候会为这个app创建一个共用的task,而如果有Activity设置的是singlelnstance模式,那么这个Activity就不会进这个共用的task中,而是独立开辟一个新的task中,独立存在。

暂时先写这么多,等会再接着总结Activity的下篇。

 

猜你喜欢

转载自blog.csdn.net/qq_41761692/article/details/81586844