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完整的生命周期,實現這些方法,我們能監控Activity生命周期中的三個嵌套循環(monitor three nested loops in the activity lifecycle)
1.Activity的entire lifetime(全部的生命期)發生在
調用onCreate()和調用onDestory()之間。
在onCreate()方法中執行全局狀態的建立(例如定義布局),在onDestroy()方法中釋放所有保存的資源。
2.Activity的visible lifetime(可見的生命期)發生在
調用onStart()和onStop()之間。
在這個期間,用戶能在屏幕上看見Activity,和它進行交互。
系統在Activity的完整壽命中可能多次調用onStart()和onStop(),正如Activity交替地對用戶可見或隱藏。
3Activity的foreground lifetime (前台的生命期)發生在
調用onResume()和onPause()之間。
在這期間,Activity在屏幕上所有其他Activity的前面,有用戶輸入焦點。
一個Activity能頻繁的在前台進入和出去之間轉變。
下面這張圖很好的講解了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 @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,"onCreate");
14 }
15 @Override
16 protected void onStart() {
17 super.onStart();
18 Log.d(TAG, "onStart");
19 }
20 @Override
21 protected void onResume() {
22 super.onResume();
23 Log.d(TAG, "onResume");
24 }
25 @Override
26 protected void onPause() {
27 super.onPause();
28 Log.d(TAG, "onPause");
29 }
30 @Override
31 protected void onStop() {
32 super.onStop();
33 Log.d(TAG, "onStop");
34 }
35 @Override
36 protected void onDestroy() {
37 super.onDestroy();
38 Log.d(TAG, "onDestroy");
39 }
40 @Override
41 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 <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>