轉載請在文章開頭處註明本博客網址:http://www.cnblogs.com/JohnTsai
html
聯繫方式:JohnTsai.Work@gmail.comandroid
[Android四大組件學習系列Activity篇]app
1.Android四大組件之——Activity(一)定義、狀態和後退棧(圖文詳解)ide
2.Android四大組件之——Activity的生命週期(圖文詳解)oop
上一篇文章講了Activity的定義、狀態和後退棧,如今講講Activity的重點和難點——Activity的生命週期。佈局
//建立Activity public 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的生命週期和上面說的三種生命期:post
下面經過一個Demo來學習如下Activity的生命週期:學習
Demo很簡單,就只有兩個Activity,MainActivity和SecondActivity和一個按鈕。點擊按鈕,由MainActivity跳轉到SecondActivity。this
MainActivity:url
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 @Override 16 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 @Override 24 public void onClick(View v) { 25 Intent intent = new Intent(MainActivity.this,SecondActivity.class); 26 startActivity(intent); 27 } 28 }); 29 30 } 31 @Override 32 protected void onPause() { 33 Log.d(TAG, "MainActivity onPause "); 34 super.onPause(); 35 } 36 @Override 37 protected void onResume() { 38 Log.d(TAG, "MainActivity onResume "); 39 super.onResume(); 40 } 41 @Override 42 protected void onStart() { 43 super.onStart(); 44 Log.d(TAG,"MainActivity onStart "); 45 } 46 @Override 47 protected void onStop() { 48 super.onStop(); 49 Log.d(TAG, "MainActivity onStop "); 50 } 51 @Override 52 protected void onDestroy() { 53 super.onDestroy(); 54 Log.d(TAG, "MainActivity onDestroy "); 55 } 56 @Override 57 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 @Override 10 protected void onCreate(Bundle savedInstanceState) { 11 setContentView(R.layout.second_layout); 12 super.onCreate(savedInstanceState); 13 Log.d(TAG,"SecondActivity onCreate"); 14 15 } 16 @Override 17 protected void onStart() { 18 super.onStart(); 19 Log.d(TAG, "SecondActivity onStart"); 20 } 21 @Override 22 protected void onResume() { 23 super.onResume(); 24 Log.d(TAG, "SecondActivity onResume"); 25 26 } 27 @Override 28 protected void onPause() { 29 super.onPause(); 30 Log.d(TAG, "SecondActivity onPause"); 31 } 32 @Override 33 protected void onStop() { 34 super.onStop(); 35 Log.d(TAG, "SecondActivity onStop"); 36 } 37 @Override 38 protected void onDestroy() { 39 super.onDestroy(); 40 Log.d(TAG, "SecondActivity onDestroy"); 41 } 42 @Override 43 protected void onRestart() { 44 super.onRestart(); 45 Log.d(TAG, "SecondActivity onRestart"); 46 } 47 }
使用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 <application 12 android:allowBackup="true" 13 android:icon="@drawable/ic_launcher" 14 android:label="@string/app_name" 15 android:theme="@style/AppTheme" > 16 <activity 17 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 <activity 26 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()
7.Activity處於運行狀態,手機此時鎖屏。
能夠看出,手機鎖屏,此時因爲Activity不可見,會進入中止狀態。
依次調用回調方法:onPause()->onStop()
8.當應用正在運行時,手機鎖屏,而後解鎖回到應用界面。
能夠看出應用從中止狀態恢復到運行狀態。
依次調用回調方法:onRestart()->onStart()->onResume()
本人郵箱:JohnTsai.Work@gmail.com,歡迎交流討論。
歡迎轉載,轉載請在文章開頭處註明本博客網址:http://www.cnblogs.com/JohnTsai
若是喜歡,請點推薦!謝謝~