活动表示具有用户界面的单个屏幕,就像Java的窗口或框架一样.Android活动是ContextThemeWrapper类的子类.
如果您使用过C,C ++或那么您必须看到Java编程语言,您的程序从 main()函数开始.非常类似的方式,Android系统在活动中启动其程序,首先是对 onCreate()回调方法的调用.有一系列回调方法启动一个活动和一系列回调方法,拆除活动,如下面的活动生命周期图所示:( image courtesy:android.com )
Activity类定义以下回调即事件.您不需要实现所有回调方法.但是,了解每一个并实现那些确保您的应用程序的行为符合用户期望的方式非常重要.
Sr.No | Callback&描述 |
---|---|
1 | onCreate() 这是第一次回调并在首次创建活动时调用. |
2 | onStart() 当活动对用户可见时,将调用此回调. |
3 | onResume() 当用户开始与应用程序交互时调用此方法. |
4 | onPause() 暂停的活动不会收到用户输入,也无法执行任何代码,并在暂停当前活动并恢复上一个活动时调用. |
5 | onStop() 此回调当活动不再可见时调用. |
6 | onDestroy() 在销毁活动之前调用此回调由系统. |
7 | onRestart() 在停止活动后重启活动时会调用此回调. |
示例
此示例将指导您完成简单的步骤以显示Android应用程序活动生命周期.按照以下步骤修改我们在 Hello World示例章节中创建的Android应用程序;
Step | 描述 |
---|---|
1 | 您将使用Android工作室创建Android应用程序并将其命名为 com.example.helloworld 下的 HelloWorld ,如 Hello World示例章节中所述. |
2 | 修改主要活动文件 MainActivity.java 如下所述.保持其余文件不变. |
3 | 运行应用程序以启动Android模拟器并验证应用程序中所做更改的结果. |
以下是修改后的主要活动文件 src/com.example.helloworld/MainActivity.java 的内容.该文件包括每个基本生命周期方法. Log.d()方法已用于生成日志消息 :
package com.example.helloworld;import android.os.Bundle;import android.app.Activity;import android.util.Log;public class MainActivity extends Activity { String msg = "Android : "; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(msg, "The onCreate() event"); } /** Called when the activity is about to become visible. */ @Override protected void onStart() { super.onStart(); Log.d(msg, "The onStart() event"); } /** Called when the activity has become visible. */ @Override protected void onResume() { super.onResume(); Log.d(msg, "The onResume() event"); } /** Called when another activity is taking focus. */ @Override protected void onPause() { super.onPause(); Log.d(msg, "The onPause() event"); } /** Called when the activity is no longer visible. */ @Override protected void onStop() { super.onStop(); Log.d(msg, "The onStop() event"); } /** Called just before the activity is destroyed. */ @Override public void onDestroy() { super.onDestroy(); Log.d(msg, "The onDestroy() event"); }}
活动类使用 res/layout中可用的XML文件加载所有UI组件项目的文件夹.以下语句从 res/layout/activity_main.xml文件加载UI组件:
setContentView(R.layout.activity_main);
应用程序可以有一个或多个活动,没有任何限制.您为应用程序定义的每个活动都必须在 AndroidManifest.xml 文件中声明,并且必须使用< intent-filter>在清单中声明应用程序的主要活动.其中包括MAIN操作和LAUNCHER类别,如下所示:
如果未针对您的某项活动宣布MAIN操作或LAUNCHER类别,则您的应用图标将不会显示在主屏幕的应用列表中.
让我们尝试运行我们刚修改过的修改过的 Hello World!应用程序.我假设您在进行环境设置时创建了 AVD .要从Android工作室运行应用程序,请打开项目的一个活动文件,然后单击运行 icon从工具栏中. Android工作室在您的AVD上安装应用程序并启动它,如果您的设置和应用程序一切正常,它将显示模拟器窗口,您应该在Android工作室的 LogCat 窗口中看到以下日志消息 :
08-23 10:32:07.682 4480-4480/com.example.helloworld D/Android :: The onCreate() event08-23 10:32:07.683 4480-4480/com.example.helloworld D/Android :: The onStart() event08-23 10:32:07.685 4480-4480/com.example.helloworld D/Android :: The onResume() event
让我们尝试点击Android模拟器上的锁定屏幕按钮,它将在android studio的 LogCat 窗口中生成以下事件消息:
08-23 10:32:53.230 4480-4480/com.example.helloworld D/Android :: The onPause() event08-23 10:32:53.294 4480-4480/com.example.helloworld D/Android :: The onStop() event
让我们再次尝试解锁Android上的屏幕模拟器,它将在Android工作室的 LogCat 窗口中生成以下事件消息:
08-23 10:34:41.390 4480-4480/com.example.helloworld D/Android :: The onStart() event08-23 10:34:41.392 4480-4480/com.example.helloworld D/Android :: The onResume() event
接下来,让我们再次尝试点击返回按钮 ,它将在Android工作室的 LogCat 窗口中生成以下事件消息,这将完成Android应用程序的活动生命周期.
08-23 10:37:24.806 4480-4480/com.example.helloworld D/Android :: The onPause() event08-23 10:37:25.668 4480-4480/com.example.helloworld D/Android :: The onStop() event08-23 10:37:25.669 4480-4480/com.example.helloworld D/Android :: The onDestroy() event