Android Activity | 青训营笔记

206 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第3天

上篇:Android 简介 Android 简介 - www.wolai.com/cyansu/mSnu…
本篇:Android Activity - www.wolai.com/cyansu/i1DV…

Activity

Android 平台上,Activity 是应用的基本构建块之一。它们充当用户与应用互动的入口点,同时也决定了用户在应用内部或应用之间导航的方式,前者如返回按钮,后者如“最近使用的应用”按钮。

Activity类是 Android 应用的关键组件。在编程范式中,应用是通过 main() 方法启动的,而 Android 系统与此不同,它会调用与其生命周期特定阶段相对应的特定回调方法来启动 Activity 实例中的代码。

Activity 提供窗口供应用在其中绘制界面。此窗口通常会填满屏幕,但也可能比屏幕小,并浮动在其他窗口上面。通常,一个 Activity 实现应用中的一个屏幕。大多数应用包含多个屏幕,这意味着它们包含多个 Activity。通常,应用中的一个 Activity 会被指定为主 Activity,这是用户启动应用时出现的第一个屏幕。然后,每个 Activity 可以启动另一个 Activity,以执行不同的操作。


生命周期

Activity 类中定义了七个回调方法,覆盖 Activity 整个生命周期:

  • onCreat() :在 Activity 第一次被创建的时候调用;
  • onStart() :在 Activity 由不可见变可见时调用;
  • onResume() :在 Activity 与用户交互时调用,此时的 Activity 一定位于栈顶;
  • onPause() :在 Activity 被暂停,调用另一个程序或 Activity 时被调用;
  • onStop() :在 Activity 完全不可见时调用;
  • onDestroy() :在 Activity 被销毁前调用,调用后 Activity 变为销毁状态;
  • onRestart() :在 Activity 由停止状态变为运行状态前被调用,调用后 Activity 重新启动。

正如把大象塞进冰箱需要三步,一个 Activity 的创建也分为三步。

注册

所有的 Activity 都需要在 AndroidManifest.xml (清单文件)中进行注册才能生效。

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.test">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Test"
        tools:targetApi="31">
        
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

我们在 application 标签内使用 activity 标签对 Activity 进行注册。

具体参考: Android 开发者  |  Android Developers (google.cn)

  • <activity>

    • android:name :指定具体注册的 Activity.MainActivitycom.example.activitytest.FirstActivity 的缩写;

    • android:exported :此元素设置 Activity 是否可由其他应用的组件启动:

      • 如果设为“true”,那么 Activity 可由任何应用访问,并且可通过其确切类名称启动。
      • 如果设为“false”,则 Activity 只能由同一应用的组件、使用同一用户 ID 的不同应用或具有特权的系统组件启动。 没有 intent 过滤器时,这是默认值。
    • </intent-filter> :

      • <action android:name="string" /> :向 Intent 过滤器添加操作。如果 Intent 过滤器中没有 <action> 元素,则过滤器不接受任何 Intent 对象。
      • <category android:name="string" /> :向 Intent 过滤器添加类别名称。

      注:此声明用于设置主启动 Activity

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

布局

Android程序的设计讲究逻辑和视图分离。布局是用来显示界面内容的,布局文件采用 xml 进行编写。

res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

</androidx.constraintlayout.widget.ConstraintLayout>

绑定

Activity 中调用 setContentView() 方法来给当前的 Activity 加载一个布局,在 setContentView() 方法中,我们一般会传入一个布局文件的 id 。项目中添加的任何资源都会在 R 文件中生成一个相应的资源 id ,因此我们刚才创建的 activity_main.xml布局的 id 现在已经添加到 R 文件中了。只需要调用 R.layout.activity_main 就可以得到布局的 id,然后将这个值传入 setContentView() 方法即可。

java/com/example/test/MainActivity.kt

package com.example.test

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

    }
}

引用

  1. 第一行代码(郭霖)
  2. 探索 Android Studio | Android 开发者 | Android Developers (google.cn)
  3. Android API reference | Android Developers (google.cn)
  4. 开发者指南 | Android 开发者 | Android Developers (google.cn)