这是我参与「第四届青训营 」笔记创作活动的的第2天.
Activity简介
Activity就是我们在App上看到的一个个的页面,每个页面都是一个Activity。
Activity是安卓的四大组件之一,四大组件都需要在 AndroidManifest.xml里注册。
Activity的创建与注册
在Android Studio里,每当创建一个Activity,系统都会帮我们自动注册。注册格式
<!--AndroidManifest.xml-->
<activity
android:name=".MainActivity"
android:exported="true">
<!--这里是声明意图-->
<intent-filter>
<!--以下两行代表了这个Activity是启动页-->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Activity的Kotlin文件
//MainActivity.kt
class MainActivity : AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
setContentView()用于设定当前Activity的layout文件,也就是页面布局文件。
在Layout文件中存放了当前Activity上的元素和样式
Layout文件格式:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
</LinearLayout>
orientation代表了布局的方向,layout_width,layout_height是当前元素的宽和高的设定,可以填入数字大小,也可以选择match_parent当大小与父元素一致或者wrap_content刚刚好能包住子元素。
LinearLayout会把所有包含的Views以单行或者单列的方式排布。它的属性如下
Activity的切换
使用Intent可以在不同的Activity之间切换。
Intent如其意思就是意图
Intent分显式与隐式
显式的Intent使用方式
val mIntent = Intent(context,SecondActivity::class.java)
context.startActivity(mIntent)
其中Intent的第一个参数式当前Activity的上下文,第二个参数是要跳转到的Activity
最后用通过startActivity来启动这个Intent
隐式的Activity我不会,跳过
Intent可以用来传输数据,延续上述代码而记
val mIntent = Intent(context,SecondActivity::class.java)
mIntent.putExtra("myTag",Data)
context.startActivity(mIntent)
数据可以在目标Activity取出
取出的方法:
val extra = intent.extras
//第一种方法
val data = extra?.get("mTag") as <Type>
//第二种方法
data = extra?.getInt/getLong/... ("mTag")
Activity的启动模式
Activity在显示的方面很像栈这种数据结构
后面进入的Activity在上面,最先进入的Activity在最下面
返回上一页只需要关闭栈顶的Activity就可以了。
启动模式定义在AndroidManifest.xml的目标Activity的标签里,定义方法为android:launchMode="",其值有四种
- standard 默认,在当前的栈内可以存在多个相同的Activity
- singleTop 当前的栈内的Activity不能连续重复
- singleTask 当前的栈内不能有重复
- singleInstance 整个系统不可重复
Activity生命周期概览
全文背诵,见图
在启动的时候,Activity遵循路径 OnCreate -> onStart -> onResume
销毁时,路径为 onPuase -> onStop -> onDestroy
页面恢复时,路径为 onRestart -> onStart -> onResume
但在低版本(4.x)的Android,没有onStop,只有onPause
当退出时,要在onStop或者onSaveInstance保存数据,在onRestore恢复数据,在重新启动/用这些数据的时候要做空指针判断,否则很可能导致空指针异常而崩溃退出。