❤️【Android精进之路-04】Android核心组件Activity,必须掌握的知识点(Activity是什么,生命周期是怎样的)❤️

简介: Activity组件是Android的用户接口程序,它充当了Android应用程序与用户的交互入口。

Activity组件是什么

Activity组件是Android的用户接口程序,它充当了Android应用程序与用户的交互入口。可以将它比喻成Android管理员:需要在屏幕显示什么,处理用户的不同操作都需要由Activity来协调管理。比如用户需要打电话,拍照等操作都可以通过Activity提供的交互接口来实现。


每个Activity都提供了用户界面窗口(即屏幕)。一般情况下,该界面窗口会填满整个屏幕,但是也可以比屏幕小或者浮在其他窗口之上。


一个Android应用程序通常包含多个屏幕,即意味着有多个Activity,但是只能有一个Activity作为应用程序的主Activity。这个主Activity就相当于Java应用程序中的main函数,是Android应用程序启动后用户看到的第一个屏幕。


Android 应用程序中的多个 Activity 可以直接相互调用以完成不同工作。 例如:

一个电子邮件的应用程序中主Activity提供了显示电子邮件收件箱的屏幕,可以从主Activity启动其他Activity用于执行写邮件和打开邮件这类任务。

Activity的生命周期

一个Activity从被创建—>启动–>暂停–>销毁是一个完整的生命周期。当新的Activity被启动的时候,之前的Activity就会停止,但是不会立马被销毁,而是被压入到"后退栈(Back Stack)“的栈顶。这里的后退栈遵循"后进先出"的原则,当新启动的Activity被使用完毕,用户单击"Back” 按钮时,当前的Activity会被销毁,而原先的Activity会被从"后退栈"中弹出并被激活。

Activity本质上有三种状态:


运行状态:Activity运行于屏幕的最上层并且获得了用户焦点

暂停状态:Activity依然存在,但是没有获得用户焦点。当前的Activity没有被运行态的Activity遮挡住,用户是可以看到其用户界面的。

停止状态:当前的Activity完全被处于运行态的Activity遮挡住,其用户界面完全不被用户看见。如果Activity离开可见阶段,长时间失去焦点,就很可能会被系统销毁以释放资源。当然,即使该Activity被销毁掉,用户对该Activity所做的更改也会被保存在Bundle对象中,当用户需要重新显示该Activity时,Android系统会根据之前保存的状态信息将该Activity重建。

当Activity状态发生改变时,都会通过状态回调函数来通知Android系统,开发人员可以通过这些回调函数对Activity进行进一步的控制。这些状态回调函数由android.app.Activity 类提供。所有的Activity都必须要继承android.app.Activity类或者它的子类。Activity的生命周期如图1所示:

图1是Android官方开发文档上提供的图,这里我翻译了一下,提供了一个汉化版的图供有需要的同学查看。

图1和图2 详细的展示了Activity的生命周期。其主要有如下几个流程:

当Activity启动时:会调用 onCreate(),onStart(),onResume() 三个方法,使Activity处于运行状态,即在屏幕显示并获得用户焦点。

当用户切换到其他Activity时:该Activity会进入暂停状态,会调用onPause()方法,当用户返回该Activity时会重新调用onResume()方法激活该Activity。

当用户关闭该应用,切换到其他应用程序是会调用onStop(),onDestory() 方法,销毁该Activity。

当该Activity长时间不显示的话则调用 onStop()方法进入停止状态,用户重新浏览该Activity时会调用onRestart(),onStart(),onResume() 三个方法,Activity重新进入运行状态。

下面就用代码演示一下:这里创建了一个名为MainActivity的简单Activity。在每个回调方法中都打印了XXX执行了,通过演示让大家对Activity的生命周期有一个更清晰的印象。

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i(TAG, "onCreate执行了");
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart执行了");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "onResume执行了");
    }
    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "onPause执行了");
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy执行了");
    }
    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop执行了");
    }
}

项目启动之后的演示效果如下:


Android的Activity生命周期的演示



这里介绍一下每个回调函数:

名称 调用时间
onCreate(Bundle savedInstanceState) 创建Activity时调用,该方法通过参数savedInstanceState保存Activity的对象的状态
onStart() Activity变为在屏幕上对用户可见时调用
onResume() Activity开始与用户交互时调用(无论是启动还是重启一个活动,该方法总是被调用)
onPause() 当用户切换到其他Activity时调用,该Activity会暂停,让出CPU的调用
onStop() 当该Activity长时间不显示时调用
onRestart() 重启启动已经停止的Activity时调用
onDestroy() Activity被完全从系统内存中移除时调用,该方法被调用可能是因为直接调用了finish()方法或者系统决定停止该活动并释放资源

总结

本文详细介绍了Activity的生命周期,需要明确的是Activity是Android应用程序与用户交互的入口,是用户与Android应用程序交互的中枢。它有完整的生命周期。


相关文章
|
2天前
|
Android开发 开发者
Android UI设计中,Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等,定义在`styles.xml`。
【6月更文挑战第26天】Android UI设计中,Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等,定义在`styles.xml`。要更改主题,首先在该文件中创建新主题,如`MyAppTheme`,覆盖所需属性。然后,在`AndroidManifest.xml`中应用主题至应用或特定Activity。运行时切换主题可通过重新设置并重启Activity实现,或使用`setTheme`和`recreate()`方法。这允许开发者定制界面并与品牌指南匹配,或提供多主题选项。
14 6
|
2天前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
13 2
|
3天前
|
Android开发 开发者
Android UI中的Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等。要更改主题
【6月更文挑战第25天】Android UI中的Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等。要更改主题,首先在`styles.xml`中定义新主题,如`MyAppTheme`,然后在`AndroidManifest.xml`中设置`android:theme`。可应用于全局或特定Activity。运行时切换主题需重置Activity,如通过`setTheme()`和`recreate()`方法。这允许开发者定制界面以匹配品牌或用户偏好。
11 2
|
12天前
|
JavaScript Java Android开发
kotlin安卓在Jetpack Compose 框架下跨组件通讯EventBus
**EventBus** 是一个Android事件总线库,简化组件间通信。要使用它,首先在Gradle中添加依赖`implementation 'org.greenrobot:eventbus:3.3.1'`。然后,可选地定义事件类如`MessageEvent`。在活动或Fragment的`onCreate`中注册订阅者,在`onDestroy`中反注册。通过`@Subscribe`注解方法处理事件,如`onMessageEvent`。发送事件使用`EventBus.getDefault().post()`。
|
13天前
|
Android开发
Android面试题之activity启动流程
该文探讨了Android应用启动和Activity管理服务(AMS)的工作原理。从Launcher启动应用开始,涉及Binder机制、AMS回调、进程创建、Application和Activity的生命周期。文中详细阐述了AMS处理流程,包括创建ClassLoader、加载APK、启动Activity的步骤,以及权限校验和启动模式判断。此外,还补充了activity启动流程中AMS的部分细节。欲了解更多内容,可关注公众号“AntDream”。
15 1
|
20天前
|
存储 Java Android开发
Android上在两个Activity之间传递Bitmap对象
Android上在两个Activity之间传递Bitmap对象
16 2
|
21天前
|
XML Android开发 数据格式
【Android UI】中间对齐UI组件
【Android UI】中间对齐UI组件
11 1
|
24天前
|
Java Android开发 C++
42. 【Android教程】活动:Activity
42. 【Android教程】活动:Activity
20 2
|
存储 缓存 监控
纯干货Android知识点整理(二)
纯干货Android知识点整理(二)
121 0
|
XML 缓存 JSON
纯干货Android知识点整理(一)
纯干货Android知识点整理(一)
174 0