一、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