实例
本示例将带您通过简单的步骤来展示Android应用程序活动的生命周期。请按照以下步骤修改我们在
Hello World示例一章中创建的Android应用程序-
- 您将使用Android Studio创建一个Android应用程序,并将其命名为HelloWorld,位于com.jc2182.helloworld包下。
- 修改主活动文件MainActivity.java,如下所述。其余文件保持不变。
- 运行该应用程序以启动Android模拟器并验证在该应用程序中所做更改的结果。
以下是修改后的主要活动文件src/com.jc2182.helloworld/MainActivity.java的内容。该文件包括每种基本生命周期方法。所述Log.d方法已经被用来生成日志消息-
package com.jc2182.helloworld;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
String msg = "Android : ";
/** 在activity首次创建时调用。 */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(msg, "onCreate() 事件");
}
/** 当activity即将可见时调用。 */
@Override
protected void onStart() {
super.onStart();
Log.d(msg, "onStart() 事件");
}
/** 当activity变为可见时调用。 */
@Override
protected void onResume() {
super.onResume();
Log.d(msg, "onResume() 事件");
}
/** 在另一个activity获得焦点时调用。 */
@Override
protected void onPause() {
super.onPause();
Log.d(msg, " onPause() 事件");
}
/** 当activity不再可见时调用 */
@Override
protected void onStop() {
super.onStop();
Log.d(msg, "onStop() 事件");
}
/** 在活activity销毁之前调用。 */
@Override
public void onDestroy() {
super.onDestroy();
Log.d(msg, "onDestroy() 事件");
}
}
Activity类使用项目的res/layout文件夹中可用的XML文件加载所有UI组件。以下语句从res/layout/activity_main.xml文件加载UI组件:
setContentView(R.layout.activity_main);
一个应用程序可以具有一个或多个activity,而没有任何限制。您为应用程序定义的每个activity都必须在AndroidManifest.xml文件中声明,并且应用程序的main activity必须在清单中使用<intent-filter>声明,其中包括MAIN操作和LAUNCHER类别,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jc2182.helloworld">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
如果未为您的activity之一声明MAIN操作或LAUNCHER类别,则您的应用程序图标将不会出现在主屏幕的应用程序列表中。让我们尝试运行修改后的Hello World!我们刚刚修改的应用程序。我假设您在进行环境设置时已创建了AVD。要从Android Studio运行该应用,请打开您项目的activity文件之一,然后Android Studio运行图标从工具栏中单击“运行”图标。Android studio将应用程序安装在您的AVD上并启动它,如果设置和应用程序一切正常,它将显示Emulator窗口,并且您应该在Android studio的LogCat窗口中看到以下日志消息-
2020-07-07 16:21:59.664 8407-8407/com.jc2182.helloworld D/Android :: onCreate() 事件
2020-07-07 16:21:59.671 8407-8407/com.jc2182.helloworld D/Android :: onStart() 事件
2020-07-07 16:21:59.672 8407-8407/com.jc2182.helloworld D/Android :: onResume() 事件
让我们尝试单击Android模拟器上的锁屏按钮,它将在Android studio的LogCat窗口中生成以下事件消息:
2020-07-07 16:24:24.042 8407-8407/com.jc2182.helloworld D/Android :: onPause() 事件
2020-07-07 16:24:25.042 8407-8407/com.jc2182.helloworld D/Android :: onStop() 事件
让我们再次尝试在Android模拟器上解锁屏幕,它将在Android Studio的LogCat窗口中生成以下事件消息:
2020-07-07 16:25:59.671 8407-8407/com.jc2182.helloworld D/Android :: onStart() 事件
2020-07-07 16:25:59.672 8407-8407/com.jc2182.helloworld D/Android :: onResume() 事件
接下来,让我们再次尝试Android后退按钮在Android仿真器上单击“后退”按钮,它将在Android Studio的LogCat窗口中生成以下事件消息,从而完成了Android应用程序的活动生命周期。
2020-07-07 16:26:24.042 8407-8407/com.jc2182.helloworld D/Android :: onPause() 事件
2020-07-07 16:26:25.042 8407-8407/com.jc2182.helloworld D/Android :: onStop() 事件
2020-07-07 16:26:25.043 8407-8407/com.jc2182.helloworld D/Android :: onDestroy() 事件