转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai
联系方式:JohnTsai.Work@gmail.com
[Android四大组件学习系列Activity篇]
1.Android四大组件之——Activity(一)定义、状态和后退栈(图文详解)
2.Android四大组件之——Activity的生命周期(图文详解)
上一篇文章讲了Activity的定义、状态和后退栈,现在讲讲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完整的生命周期,实现这些方法,我们能监控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,"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 }