文章目录
前言
安卓是目前最主流的移动操作系统之一,而在安卓中,Activity 是安卓提供的一种常用组件,是用户界面的基本单元之一。Activity 可以实现应用程序的不同界面或页面,为用户呈现不同的交互效果,使用户可以通过对不同 Activity 的跳转来完成应用程序各个功能之间的切换和操作。
简单来说,Activity 就是一个屏幕窗口,每个 Activity 都有自己的生命周期,并且可以包含许多其他的 UI 元素。在使用 Activity 时,我们需要先定义 Activity 的布局,然后在 Java 代码中实例化 Activity 并将其与布局相关联。接着,在 Activity 中可以注册许多事件和监听器,当用户触发这些事件时,程序会做出相应的响应。
在需要比较复杂的界面操作时,我们可以将多个 Activity 进行组合使用,通过跳转不同的 Activity 实现不同的功能,在整个应用程序中呈现出一个完整、流畅的交互体验。
一、Activity与界面布局layout
Activity 可以看作是用户界面的一个页面,而布局(layout)则是 Activity 中用于排列和组织各个 UI 元素的基本单元。
在安卓应用程序开发中,我们通常会使用 XML 文件定义 Activity 的布局。这些 XML 文件可以包含不同类型的布局,例如线性布局、相对布局、帧布局等,通过这些布局可以将各个 UI 元素组成所需的界面效果。在 XML 文件中,我们会为每个 UI 元素指定它在布局中的位置、大小、颜色、字体等属性。同时,也可以将自己编写的 Java 代码与 XML 布局文件进行关联,从而实现 UI 元素与应用逻辑的交互。
Activity 当中有许多 UI 元素需要显示,而布局则是对这些 UI 元素进行整合和布置,使其呈现出想要的页面样式。在布局中可以定义各种组件,例如 TextView、Button、ImageView 等,通过使用不同的布局方式,我们可以将这些组件有机地组合到一起,形成一个完整的界面效果。
通常一个界面布局对应一个Activity布局文件例如:activity_NAME.xml, 其中 “NAME” 对应某个Activity名,但一个Activity不一定对应一个界面布局。
二、Activity的生命周期
Activity生命周期指Activity从启动到销毁的过程,在该过程中一个 Activity 可以被系统依次调用不同的生命周期回调函数,从而实现一系列功能。Activity表现为四种状态:
① 活动状态Active:Activity在用户界面中处于最上层,完全能被用户看到,能够与用户进行交互。
② 暂停状态Pause:Activity在界面上被部分遮挡,不再处于用户界面的最上层,且不能够与用户进行交互。(如弹出选择框时)
③ 停止状态Stop:Activity被其他Activity全部遮挡,界面完全不能被用户看到。
④ 非活动状态Dead:Activity没有启动或者被finish()。
显然,Activity采用栈的方式进行存储:
随着Activity自身状态的变化,Android系统会调用7个不同的事件回调函数:
-
onCreate():Activity 第一次被创建时调用,在这个阶段可以进行一些初始化操作,例如布局文件加载、数据的初始化等;
-
onStart():Activity 显示在前台,但是用户还无法进行交互;
-
onResume():Activity 显示在前台并且可以与用户进行交互,此时它已经完全可见;
-
onPause():当其他 Activity 出现在前台或者当前 Activity 由于某些原因失去了焦点时,Activity 调用 onPause() 回调函数,可以在此保存视图内容和暂停动画等操作;
-
onStop():当 Activity 完全不可见时,系统会调用 onStop() 回调函数, 可以在此做资源释放或者其他清理工作;
-
onRestart():当 Activity 由停止状态变成运行状态时回调此方法;
-
onDestroy():Activity 被销毁时会调用此方法,释放所有资源。
我们可以在程序中给每个回调函数添加一个输出来观察Activity的生命周期:
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
Toast.makeText(getApplicationContext(), "创建", Toast.LENGTH_SHORT).show();
}
@Override
protected void onStart() {
super.onStart();
Toast.makeText(getApplicationContext(), "启动", Toast.LENGTH_SHORT).show();
}
@Override
protected void onResume() {
super.onResume();
Toast.makeText(getApplicationContext(), "恢复", Toast.LENGTH_SHORT).show();
}
@Override
protected void onPause() {
super.onPause();
Toast.makeText(getApplicationContext(), "暂停", Toast.LENGTH_SHORT).show();
}
@Override
protected void onStop() {
super.onStop();
Toast.makeText(getApplicationContext(), "停止", Toast.LENGTH_SHORT).show();
}
@Override
protected void onRestart() {
super.onRestart();
Toast.makeText(getApplicationContext(), "重启", Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
super.onDestroy();
Toast.makeText(getApplicationContext(), "再见", Toast.LENGTH_SHORT).show();
}
}
以下是一些测试:
启动后按Home键返回桌面再进入: onPause → onStop → onRestart → onStart → onResume
锁屏后解锁: onPause → onStopon → Restart → onStart → onResume