首页 > 代码库 > Android四大组件之——Activity的生命周期(图文详解)
Android四大组件之——Activity的生命周期(图文详解)
上一篇文章讲了Activity的定义、状态和后退栈,现在讲讲Activity的重点和难点——Activity的生命周期。
- Activity生命周期的回调方法:
//创建Activitypublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); }//Activity快要变成可见的 @Override protected void onStart() { super.onStart(); }//Activity变成可见的,处于运行状态 @Override protected void onResume() { super.onResume(); }//其他Activity获得用户焦点,(Activity快要暂停了) @Override protected void onPause() { super.onPause(); }//Activity不再可见,处于停止状态 @Override protected void onStop() { super.onStop(); }//Activity快要被销毁了 @Override protected void onDestroy() { super.onDestroy();
} }
下面这张图很好的讲解了Activity的生命周期和上面说的三种生命期:
下面通过一个Demo来学习以下Activity的生命周期:
Demo很简单,就只有两个Activity,MainActivity和SecondActivity和一个按钮。点击按钮,由MainActivity跳转到SecondActivity。
MainActivity:
1 package com.example.activitytest; 2 3 import android.app.Activity; 4 import android.content.Intent; 5 import android.os.Bundle; 6 import android.util.Log; 7 import android.view.View; 8 import android.view.View.OnClickListener; 9 import android.widget.Button;10 11 public class MainActivity extends Activity {12 13 private Button btn;14 private static final String TAG = "ActivityTest";15 @Override16 protected void onCreate(Bundle savedInstanceState) {17 super.onCreate(savedInstanceState);18 Log.d(TAG, "MainActivity onCreate");19 setContentView(R.layout.activity_main);20 btn = (Button)findViewById(R.id.btn);21 btn.setOnClickListener(new OnClickListener() {22 23 @Override24 public void onClick(View v) {25 Intent intent = new Intent(MainActivity.this,SecondActivity.class);26 startActivity(intent);27 }28 });29 30 }31 @Override32 protected void onPause() {33 Log.d(TAG, "MainActivity onPause ");34 super.onPause();35 }36 @Override37 protected void onResume() {38 Log.d(TAG, "MainActivity onResume ");39 super.onResume();40 }41 @Override42 protected void onStart() {43 super.onStart();44 Log.d(TAG,"MainActivity onStart ");45 }46 @Override47 protected void onStop() {48 super.onStop();49 Log.d(TAG, "MainActivity onStop ");50 }51 @Override52 protected void onDestroy() {53 super.onDestroy();54 Log.d(TAG, "MainActivity onDestroy ");55 }56 @Override57 protected void onRestart() {58 super.onRestart();59 Log.d(TAG, "MainActivity onRestart ");60 }61 }
SecondActivity:
1 package com.example.activitytest; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.util.Log; 6 7 public class SecondActivity extends Activity { 8 private static final String TAG = "ActivityTest"; 9 @Override10 protected void onCreate(Bundle savedInstanceState) {11 setContentView(R.layout.second_layout);12 super.onCreate(savedInstanceState);13 Log.d(TAG,"onCreate");14 }15 @Override16 protected void onStart() {17 super.onStart();18 Log.d(TAG, "onStart");19 }20 @Override21 protected void onResume() {22 super.onResume();23 Log.d(TAG, "onResume");24 }25 @Override26 protected void onPause() {27 super.onPause();28 Log.d(TAG, "onPause");29 }30 @Override31 protected void onStop() {32 super.onStop();33 Log.d(TAG, "onStop");34 }35 @Override36 protected void onDestroy() {37 super.onDestroy();38 Log.d(TAG, "onDestroy");39 }40 @Override41 protected void onRestart() {42 super.onRestart();43 Log.d(TAG, "onRestart");44 }45 }
使用Activity需要在Manifest.xml文件中注册:
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.activitytest" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 7 <uses-sdk 8 android:minSdkVersion="8" 9 android:targetSdkVersion="21" />10 11 <application12 android:allowBackup="true"13 android:icon="@drawable/ic_launcher"14 android:label="@string/app_name"15 android:theme="@style/AppTheme" >16 <activity17 android:name=".MainActivity"18 android:label="@string/app_name" >19 <intent-filter>20 <action android:name="android.intent.action.MAIN" />21 <category android:name="android.intent.category.LAUNCHER" />22 23 </intent-filter>24 </activity>25 <activity26 android:name=".SecondActivity"27 android:label="SecondActivity"28 android:theme="@android:style/Theme.Dialog"29 >30 </activity>31 </application>
1. 运行应用,MainActivity运行。
可以看出一个Activity运行调用的回调方法是:onCreate()->onStart()->onResume()
2. 点击跳转按钮,由MainActivity跳转到SecondActivity:
1>SecondActivity是Dialog。
由于SecondActivity是Dialog,所以MainActivity依然可见,所以只调用了它的onPause()方法。
2>若将SecondActivity改为不是Dialog(只需在Manifest.xml文件中删掉 android:theme="@android:style/Theme.Dialog"这一行即可)
再点击跳转按钮:
对于MainActivity,由于不可见,状态由运行变为停止。
依次调用了它的回调方法:onPause()->onStop()
3.Activity处于运行状态时,点击返回按钮。
点击返回按钮,Activity由运行状态变为死亡状态,依次调用它的回调方法:onPause()->onStop()->onDestroy()
4.Activity处于运行状态,点击主页按钮,返回桌面。
Activity由运行状态变为停止状态,依次调用它的回调方法:onPause()->onStop()
5.Activity处于停止状态,即由桌面返回到Activity。
停止->运行,依次调用回调方法:onRestart()->onStart()->onResume()
6.Activity处于运行状态,旋转屏幕:
可以看出,旋转屏幕是一个销毁Activity然后重新创建Activity的过程。
运行->暂停->停止->死亡->运行
依次调用回调方法:onPause()->onStop->onDestroy()->onCreate()->onStart()->onResume()
本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论。
欢迎转载,转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai
如果喜欢,请点推荐!
Android四大组件之——Activity的生命周期(图文详解)