一、Activity简介
Activity是Android四大基本组件(Activity,Service,Broadcast receiver,Content provider)之一。作为基本组件之一其提供的主要功能是:把各种UI组件呈现给用户;另外,因为其实现了
android.content.Context接口,所以Activity包含了很多应用程序运行环境的信息,可以把Activity看作是一个Context用于各种UI组件的创建。
下面就来探讨一下Activity是如何工作的。
一般情况下,一个应用程序会包括一个或多个Activity,要想让程序知道并正确调用到每个Activity,需要将它们一一在AndroidManifest.xml这个程序配置文件中记录下来。程序(纯后台程序以外)启动时一般会启动一个Activity,那哪个Activity会成为第一个(也就相当于程序的入口)呢?下面的配置文件回答了这一切:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.eric.helloworld" <!-- 应用程序包名 --> android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloWorld" <!-- Activity名。这个名字取法一定要保证能跟上面的package名一起构成该Activity类的全名 --> android:label="@string/app_name"> <intent-filter> <!-- 这个intent-filter决定了这个Activity是这个程序的入口,这种组合的intent-filter,一个程序中出能出现在一个Activity中,因为程序不可能同时有多个入口 --> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".TwoListDemo"/> <!-- 简易声明方式 --> </application> </manifest>
程序中使用Activity的方法是:继承Activity类,然后Override其生命周期方法。生命周方法包括:onCreate()、onStart()、onRestart()、onResume()、onPause()、onStop()、onDestroy()。关于这些方法的详细内容参照下一节。
二、Activity的生命周期
Activity的创建和结束(也就是其生命周期)都是由Android系统来管理的,但是为了告知程序员,此Activity正处在其一生中的哪个阶段,所以提供了一系列的回调方法,利用这些回调方法,程序员可以在Activity的不同生命阶段做一些想做的事。
public class ActivityLifecycleDemo extends Activity{
private static final String TAG = "ActivityLifecycleDemo";
/**
* Activity开始创建时调用.在这个方法中可以创建想要呈现的UI组件,
* 一般情况下都是使用layout布局文件,当然也可以自己创建各种View的对象.
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activitylifecycledemo);
Button button = (Button)findViewById(R.id.btn_handler);
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(ActivityLifecycleDemo.this,
CopyOfActivityLifecycleDemo.class);
startActivity(intent);
}
});
Log.i(TAG, "onCreate");
}
/**
* 当Activity创建完毕(onCreate调用完毕)后调用;或者是在onRestart调用后调用.
*/
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart");
}
/**
* onStart调用后调用,该方法调用结束后,Activity处于可用状况,不断监听各种事件的发生,
* 然后作出响应.
*/
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume");
}
/**
* 当一个Activity从栈中被弹出,重新转入前台时,会调用此方法。
*/
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "onRestart");
}
/**
* 当程序要从本Activity跳转到下一个Activity时,调用此方法.
*/
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause");
}
/**
* onPause调用后调用.此时Activity从前台转入到后台,但并没有被结束,
* 只是被压入Android系统维护的一个栈中.
*/
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop");
}
/**
* 当用户按了返回键从本Activity返回时,系统会依次调用onPause、onStop方法,
* 最后会调用onDestroy方法结束该Activity的生命。在这个方法中可以作一些回
* 收资源的清理工作。
*/
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy");
}
}
以上的示例代码的运行结果如下:
操作顺序:①、②、
①、07:32:32 "ActivityLifecycleDemo" Activity启动
12-08 07:32:32.258: INFO/ActivityLifecycleDemo(10094): onCreate
12-08 07:32:32.258: INFO/ActivityLifecycleDemo(10094): onStart
12-08 07:32:32.278: INFO/ActivityLifecycleDemo(10094): onResume
②、07:32:55 点击了"ActivityLifecycleDemo" Activity中的按钮跳转到"CopyOfActivityLifecycleDemo" Activity
12-08 07:32:55.078: INFO/ActivityLifecycleDemo(10094): onPause
12-08 07:32:55.898: INFO/ActivityLifecycleDemo(10094): onStop
⑤、07:33:15 从"CopyOfActivityLifecycleDemo" Activity返回
12-08 07:33:15.228: INFO/ActivityLifecycleDemo(10094): onRestart
12-08 07:33:15.228: INFO/ActivityLifecycleDemo(10094): onStart
12-08 07:33:15.228: INFO/ActivityLifecycleDemo(10094): onResume
⑥、07:33:26 从"ActivityLifecycleDemo" Activity返回
12-08 07:33:26.398: INFO/ActivityLifecycleDemo(10094): onPause
12-08 07:33:26.988: INFO/ActivityLifecycleDemo(10094): onStop
12-08 07:33:26.988: INFO/ActivityLifecycleDemo(10094): onDestroy
③、07:32:55 当"ActivityLifecycleDemo" Activity中的按钮被点击后程序跳转到"CopyOfActivityLifecycleDemo" Activity
12-08 07:32:55.177: INFO/CopyOfActivityLifecycleDemo(10094): onCreate
12-08 07:32:55.177: INFO/CopyOfActivityLifecycleDemo(10094): onStart
12-08 07:32:55.187: INFO/CopyOfActivityLifecycleDemo(10094): onResume
④、07:33:15 返回到"ActivityLifecycleDemo" Activity
12-08 07:33:15.169: INFO/CopyOfActivityLifecycleDemo(10094): onPause
12-08 07:33:15.888: INFO/CopyOfActivityLifecycleDemo(10094): onStop
12-08 07:33:15.888: INFO/CopyOfActivityLifecycleDemo(10094): onDestroy