1.Android系統中Activity做爲Activity棧(Stack)被管理的,你們都知道棧的特色是先進後出,因此當前活動的Activity處於棧頂,以前非活動的Activity被壓入棧底,等待是否可能被恢復爲活動狀態。java
Android API中所提供的Activity生命週期圖:android
2.下面的整個Activity生命週期中的全部方法,咱們能夠根據程序的須要來覆蓋相應的方法:app
- public class Activity extends ApplicationContext {
- //建立的時候調用
- protected void onCreate(Bundle savedInstanceState);
- //啓動的時候調用
- protected void onStart();
- //從新啓動的時候調用
- protected void onRestart();
- //恢復的時候調用
- protected void onResume();
- //暫停的時候調用
- protected void onPause();
- //中止的時候調用
- protected void onStop();
- //銷燬的時候調用
- protected void onDestroy();
- }
ide
3.下面經過實例來測試Activity的生命週期中各個方法的調用狀況,將Activity的全部方法都覆蓋,主要用Log打印輸出信息,並經過日誌(LogCat)方式來觀察運行結果。Log.v(String tag, String msg); //Verbose
Log.d(String tag, String msg); //Debug
Log.i(String tag, String msg); //Info
Log.w(String tag, String msg); //Warning
Log.e(String tag, String msg); //Error
tag相似標籤,能夠是任意字符串,一般可使用類名+方法名, 主要是用來在查看日誌時提供一個篩選條件。測試
下面的實例是測試Activity的生命週期中各個方法的調用狀況:this
MainActivity.javaspa
- package com.android.TestAvtivity.activity;
- import android.app.Activity;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class MainActivity extends Activity {
- private Button btn;
- private static final String TAG="MainActivity";
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //輸出日誌
- Log.i(TAG, "MainActivity onCreate--->");
- btn = (Button)findViewById(R.id.Button1);
- btn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- //結束當前的Activity
- MainActivity.this.finish();
- }
- });
- }
- @Override
- //啓動
- protected void onStart() {
- super.onStart();
- //輸出日誌信息
- Log.i(TAG, "MainActivity onStart--->");
- }
- @Override
- //重啓
- protected void onRestart() {
- super.onRestart();
- //輸出日誌信息
- Log.i(TAG, "MainActivity onRestart--->");
- }
- @Override
- //恢復
- protected void onResume() {
- super.onResume();
- //輸出日誌信息
- Log.i(TAG, "MainActivity onResume--->");
- }
- @Override
- //暫停
- protected void onPause() {
- super.onPause();
- //輸出日誌信息
- Log.i(TAG, "MainActivity onPause--->");
- }
- @Override
- //中止
- protected void onStop() {
- super.onStop();
- //輸出日誌信息
- Log.i(TAG, "MainActivity onStop--->");
- }
- @Override
- //銷燬
- protected void onDestroy() {
- super.onDestroy();
- //輸出日誌信息
- Log.i(TAG, "MainActivity onDestroy--->");
- }
- }
main.xml日誌
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:id="@+id/TextView01"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="測試Activit生命週期"
- />
- <Button
- android:id="@+id/Button1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="關閉Activity"
- />
- </LinearLayout>
效果圖:xml
①當啓動程序時,日誌的輸出結果以下圖所示,程序執行了onCreate()->onStart()->onResume三個方法。輸出以下:blog
MainActivity onCreate--->
MainActivity onStart--->
MainActivity onResume--->
注意:這裏我是在選擇了綠色的「+」,這時出現了下圖的界面,以後我就在Filter Name上寫入Test,by Log Tag上寫入MainActivity,按OK保存,這時就能在LogCat上面篩選咱們想要看到的信息了。
②當按(返回鍵)或者按鈕時,日誌的輸出結果以下圖所示,程序前後調用了onPause( )->onStop( )->onDestory( )三個方法。
③當按(Home鍵)時,日誌的輸出結果以下圖所示,程序前後調用了onPause( )->onStop( )這兩個方法,這時候應用程序並無銷燬。
④當再次啓動程序時,日誌的輸出結果以下圖所示,程序前後調用了onRestart( )->onStart( )->onResume( )三個方法。