Android 四大组件之Activity的知识整理
文章目录
前言
本文主要讲Activity的四大方面:
1.基本用法
2.Activity生命跳转
3.生命周期
4.启动模式
一、Activity的基本用法,或者说Activity是干什么的?
我自己的理解就是,一个Activity就是一个界面,用来放各种控件的。和用户之间进行交互。用书本上的化是Activity是一种可以包含用户界面的组件,主要是用于和用户进行交互。一个应用程序中可以包含零个或多个Activity,但其实应用程序中不会出现零个Activity。
创建一个Activity也很简单,如果没有创建一个项目就是File–>New–>New Project–>Empty Activity–Next进入项目配置界面。
当有一个项目时就是在想要在哪个文件夹下创建就点击鼠标右键,然后点击New–>Activity–>Empty Activity–Next进入项目配置界面
但创建之后就可以在上面进行需要的操作了
二、Activity生命跳转
生命跳转是什么
应用程序肯定不会就只有一个界面,所以需要界面之间进行跳转,并且有的界面跳转之后不需要再启动了,所以要销毁这个Activity,这个就要看下面讲的那个Activity生命周期了,我们这部分先不说,我们先看界面的跳转。界面跳转有很多方法,我们主要来讲Intent再Activity之间穿梭。
Intent分:显式Intent和隐式Intent
显示Intent
显示Intent比较简单,比如说现在有两个Activity,一个叫FirstActivity,另一个叫
SecondActivity。
Intent有多个函数的重载,其中一个是Intent(Context packageContext,Class<?>cls)。这两个参数是什么意思呢?第一个Contxt packageContext最简单的理解就是当前的这个Activity,那第二个Class<?>cls当然就是我们需要启动的那个Activity。
代码具体如下:
Java:
// Switch interface
Intent intent = Intent(FirstActivity.this,SecondActivity.class);
//启动目标Activity
startActivity(intent)
Kontlin
// Switch interface
val intent = Intent(this,SecondActivity::class.java);
//启动目标Activity
startActivity(intent)
这种Intent的“意图”非常的明显,因此就叫显示Intent
隐式Intent
隐式Intetn是通过抽象的action和cateoty等信息,然后由系统去分析这个Intent,并找到合适的Activity去启动。
有的人可能就会由疑问了action是什么,cateoty又是什么。再这个时候我们就要打开我们的Android项目区自己看一下,打开项目中的AndroidManifest.xml,在我们的文件理是不是有一下这四行代码:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
这四行代码是干嘛的呢?其实啊这四行代码主要的作用是我们点击app图标之后第一个打开的Activity是哪个。
看到这很多人其实应该还是很迷糊的,我知道这个有什么用呢?我还是不知道我怎么去用隐式Intent啊。别急我们接着往下看
我们再第二个Activity配置中加入四行代码:
<activity android:name=".SecondActivity"
<intent-filter>
<action android:name="com.example.activity.ACTTON_START" />
<category android:name="android.intent.categor.DEFAULT" />
</intent-filter>
</activity>
这不是六行嘛?您仔细看看第一行和最后一行是系统自动生成的。这个是干嘛用的呢,我们来理解一下:
action android:name="com.example.activitytest.ACTION_START"这句代码是用来我们进行界面交互的时候调用的参数。
category android:name="android.intent.categor.DEFAULT这行代码主要是设置这个activity对于默认的action是否是一个可选的
说了这么多到底隐式Intent应该这么写呢
代码如下:
Java
// Switch interface
Intent intent = Intent("com.example.activitytest,ACTION_START")
//启动目标Activity
startActivity(intent)
Kontlin
// Switch interface
val intent = Intent("com.example.activitytest,ACTION_START");
//启动目标Activity
startActivity(intent)
这里有一个点要记住每个Intent中只能指定一个action,但能指定多个category
关于Intent的内容先讲到这,当然这肯定是没有说完的,我会专门写一篇关于Intent文章来说明这个。
三、生命周期
生命周期是什么
我们在这简单的说明一下生命周期是什么,具体的我们之后和fragment的生命周期一起说。
我们拿一张表来说明什么是生命周期。
图片来源网络
从上面的图我们可以看出Activity总共有七个生命周期,分别是:
onCreate():在Activity创建的时候调用。
onStrat():在Activity由不可见变为可见的时候调用。
onResume():在Activity准备好和用户进行交互的时候调用。
onPause():当前Activity被其他Activity覆盖其上或被锁屏。
onStop():当前Activity已经不可见了,但是还是存在与内存里的。
onDestroy():当前Activity被销毁了,不可见。
onRestart():当前Activity重新开始,Activity在这时可见。
四、Activity启动模式
这部分我们浅谈Activity的四种启动模式,看看他们分别有什么区别。再次之前我们先来学习一下什么叫做任务栈。
任务栈(Task Stack)
任务栈任务栈,说明这个是一个存放任务的地方,任务怎么产生呢,当然是Activity和用户交互所产生任务啦,所以在这个任务栈存放的就是那些Activity。用户每启动一个Activity就把这个Activity放于栈顶,其他的Activity调用stop()
standard
standard是默认的启动模式,不需要写任何的配置,在这个模式下,启动一个Activity就是启动一个Activity,也就是说可能会启动多个相同的实列,也允许多个Activity叠加,这些Activity都放在一个任务栈里。
singleTop
这个模式可以有多个实例,但不允许有多个Activity叠加。
singleTask
这个模式和singleTop其实是差不多的,只是区别在与singleTop模式是只是针对栈顶的元素,而singleTask模式下,如果task栈内存在目标Activity实例则:1.在这个栈内位于这个Activity实例之上的所有Activity弹出栈,只留下这个Activity和这个Activity下面的Activity.
singleInstance
这个是全局唯一模式,从这个中文我们就可以知道这是一个很很搞事情的一个模式,这个模式具体什么意思呢,其实也很好理解,就是我们每启动一个Activity就可以新建一个Task,所以 一个Task有且只有一个Activity如果我们要调用以前创建过的Activity,他不会创建一个新的Task,而是把之前的Activity给重新的唤醒