`
ericliu1986
  • 浏览: 111374 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Android学习之旅(三)----Activity及其生命周期

阅读更多

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics