Activity
是Android
应用程序中包含图形界面的窗口。一个Android
应用程序可以包含0到多个Activity
,但除了Service
等不需要与用户交互的后台应用外,一般至少包含一个Activity
。
创建Activity
类
Activity
类是继承自Activity
或Activity
的子类(ListActivity
、TabActivity
等)的Java
类。
利用android
工具创建Android
项目自动生成的Activity
类如下:
package android.learn;
import android.app.Activity;
import android.os.Bundle;
public class TestLifeCycleActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
实例化Activity类创建Activity时,Activity的onCreate函数首先调用,它从res/layout的XML文件里加载界面组件。上例中使用的是main.xml
。
创建的Activity必须在应用程序配置文件AndroidManifest.xml声明才会被启动。
Android采用栈的方式管理活动,新的活动创建后被放在栈顶,成为当前正在运行的活动。
Android应用程序配置文件
与上面的Activity
同时创建的应用程序配置文件如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.learn"
android:versionCode="1"
android:versionName="1.0">
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
<activity android:name="TestLifeCycleActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
manifest
元素的package
属性定义包的名称;android:versionCode
定义应用程序的版本号,可用于自动确定应用程序是否需要更新;android:versionName
是应用程序的版本名称,主要显示给应用程序用户,采用<major>.<minor>.<point>
的格式。
application
子元素代表应用程序,它的android:icon
属性指定了应用程序的图标,android:name
属性指定应用程序的名称。
application
元素下可以包含多了activity
元素,activity
元素的android:label
属性指定了这个Activity
的显示名称,android:name
指定了这个activity
的Activity
类名称。
每个activity
节点包含一个intent-filter
元素,它的action
子元素表代表特定的动作,android:name
为android.intent.action.MAIN
的action
说明该Activity
可以作为应用程序入口。它的category
子元素表示该活动需要满足的条件,android:name
为android.intent.category.LAUNCHER
表示该活动必须可以作为应用程序的入口点。
Activity的生命周期
除了自动创建Activity类默认生成的onCreate
方法,Activity类还提供了其他多个方法响应不同的事件。
方法 | 调用时机 |
---|---|
onCreate() | 当Activity 被创建时调用 |
onStart() | 当Activity 开始对用户可见时调用 |
onResume() | 当Activity 开始与用户交互时调用 |
onPause() | 当Activity 被暂停时调用 |
onStop() | 当Activity 不再被用户可见时调用 |
onDestroy() | 当Activity 被系统销毁(主动或系统自动销毁)之前调用 |
onRestart() | 当Activity 停止后又重新开始时调用 |
下图为Android的Activity状态转移图,引自Android developper国内镜像网站。
下面例子用以演示各个状态的切换:
package android.learn;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class TestLifeCycleActivity extends Activity
{
String tag = "生命周期:";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(tag, "onCreate(Bundle savedInstanceState)");
}
@Override
public void onStart()
{
super.onStart();
Log.d(tag, "onStart()");
}
@Override
public void onResume()
{
super.onResume();
Log.d(tag, "onResume()");
}
@Override
public void onPause()
{
super.onPause();
Log.d(tag, "onPause()");
}
@Override
public void onStop()
{
super.onStop();
Log.d(tag, "onStop()");
}
@Override
public void onDestroy()
{
super.onDestroy();
Log.d(tag, "onDestroy()");
}
}
当点击回退按钮时,依次执行onPause, onStop和onDestroy()。
参考文献
- Wei-Meng Lee. Beginning Android 4 Application Development. John Wiley & Sons, Inc. 2012.
- 李刚. 疯狂Android讲义. 电子工业出版社. 2011.
- http://wear.techbrood.com/reference/android/app/Activity.html