Android 活动( Activity)
- 活动代表了一个具有用户界面的单一屏幕,如 Java 的窗口或者帧,Android 的活动是 android.view.ContextThemeWrapper 类的子类。
- 如同 Java 程序从 main() 函数开始一样,Android 系统初始化它的程序是通过活动中的 onCreate() 回调的调用开始的。
- 存在有一序列的回调方法来启动一个活动,同时有一序列的方法来关闭活动,如下面的活动声明周期图所示:
- android.app.Activity 类定义了下面的主要回调方法,可以不用实现所有的回调方法,但是其中的每一个方法都非常重要,实现这些可以保证应用行为如用户所期望的那样。
回调 |
描述 |
onCreate() |
这是第一个回调,在活动第一次创建时调用 |
onStart() |
这个回调在活动为用户可见时被调用 |
onResume() |
这个回调在应用程序与用户开始可交互的时候调用 |
onPause() |
被暂停的活动无法接受用户输入,不能执行任何代码。当当前活动将要被暂停,上一个活动将要被恢复是调用 |
onStop() |
当活动不在可见时调用 |
onDestroy() |
当活动被系统销毁之前调用 |
onRestart() |
当活动被停止以后重新打开时调用 |
生命周期
- Activity 用于显示用户界面,用户通过 Activity 交互完成相关操作
- 一个App允许有多个Activity
- onPause( ) 和 onStop( ) 被调用的前提是:打开了一个新的 Activity,区别是前者的 Activity 还处于可见的状态,后者是旧Activity 已经不可见。
使用流程图
- Android 中的四大组件,只要定义了,无论用没用,都要在 AndroidManifest.xml 对这个组件进行声明,不然运行时程序会直接退出,报 ClassNotFindException..
- 如下所示为 Android Studio 3.1.2 创建的 HelloWorld 应用,在其默认的 MaingActivity 文件内容上重写了 onCreate() 方法以外的其它方法:
package com.example.administrator.helloworld;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
/**
* 一个应用程序可以有1个或多个活动,而没有任何限制。
* 每个为应用程序所定义的活动都需要在 AndroidManifest.xml 中声明,应用的主活动的意图过滤器标签中需要包含 MAIN 动作和 LAUNCHER 类别
* 如果 MAIN 动作还是 LAUNCHER 类别没有在活动中声明,那么应用程序的图标将不会出现在主屏幕的应用列表中。
*/
public class MainActivity extends AppCompatActivity {
String msg = "Android : ";
/**
* 当活动第一次被创建时调用
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* 从项目的 res/layout 中的XML文件加载 UI 组件
* android.util.Log#d(java.lang.String, java.lang.String) 方法用于在 Logcat 窗口中打印日志
*/
setContentView(R.layout.activity_main);
Log.d(msg, "The onCreate() event");
}
/**
* 当活动即将可见时调用
*/
@Override
protected void onStart() {
super.onStart();
Log.d(msg, "The onStart() event");
}
/**
* 当活动可见时调用
*/
@Override
protected void onResume() {
super.onResume();
Log.d(msg, "The onResume() event");
}
/**
* 当其他活动获得焦点时调用
*/
@Override
protected void onPause() {
super.onPause();
Log.d(msg, "The onPause() event");
}
/**
* 当活动不再可见时调用
*/
@Override
protected void onStop() {
super.onStop();
Log.d(msg, "The onStop() event");
}
/**
* 当活动将被销毁时调用
*/
@Override
public void onDestroy() {
super.onDestroy();
Log.d(msg, "The onDestroy() event");
}
}