Android之Activity生命周期史無前例的詳細介紹,新手必必必看。
Android的Activity生命周期是一個非常重要的知識點,但是由於Activity的狀態眾多,而且狀態直接的切換類型也十分的眾多,導致Activity的方法很多,這就給新手學習並理解Activity造成了一定的難度,如果你能認真讀完我這一篇博文,那麼我相信你一定能對Activity的理解達到一個嶄新的高度,ok,下面是我對Activity的理解。
要想透徹的理解Activity,那麼必須了解一個計算機的名詞,“堆棧”,因為Activity的狀態切換方式十分類似於數據結構中的堆棧。
1、首先介紹什麼是堆棧,及其特點。
2、介紹Activity的七個狀態方法。
3、結合堆棧,詳解Activity狀態直接的切換和各個方法的調用。
1)、下面我來介紹一下什麼是“堆棧”。
堆棧 可以簡單的理解成一個的 “竹筒”,只不過種竹筒是一端封閉另一端開啟的,如圖所示:
透過這個竹筒我們不難發現,因為堆棧的一端是封閉的,所以要想往裡面放東西,必須從一端放,取的時候也只能從一端取,就是這堆棧最重要的特點,“後進先出”。
2)、下面我要介紹的是Activity的七個狀態方法。
附官方文檔圖一張:
然後附我代碼一篇:
- package cn.blue.life;
-
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
-
- public class LifteActivity extends Activity {
- Button bt;
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- this.setContentView(R.layout.main);
- bt=(Button) this.findViewById(R.id.bt);
- bt.setText("第一個activity");
- bt.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- Intent intent=new Intent(LifteActivity.this,LifteActivitySecond.class);
- startActivity(intent);
- }
- });
- Log.i("Mytag","First----onCreate");
- }
- protected void onDestroy() {
- Log.i("Mytag","First----onDestroy");
- super.onDestroy();
- }
- protected void onPause() {
- Log.i("Mytag","First----onPause");
- super.onPause();
- }
- protected void onRestart() {
- Log.i("Mytag","First----onRestart");
- super.onRestart();
- }
- protected void onResume() {
- Log.i("Mytag","First----onResume");
- super.onResume();
- }
- protected void onStart() {
- Log.i("Mytag","First----onStart");
- super.onStart();
- }
- protected void onStop() {
- Log.i("Mytag","First----onStop");
- super.onStop();
- }
- // protected void onRestoreInstanceState(Bundle savedInstanceState) {
- // Log.i("Mytag","First----onRestoreInstanceState");
- // super.onRestoreInstanceState(savedInstanceState);
- // }
- // protected void onSaveInstanceState(Bundle outState) {
- // Log.i("Mytag","First----onSaveInstanceState");
- // super.onSaveInstanceState(outState);
- // }
- }
onCreate(Bundle savedInstanceState)
onStart()
onResume()
onPause()
onStop()
onDestroy()
onRestart()
onCreate(Bundle savedInstanceState)
Activity的初始化,也就是一個全新的Activity開始時,調用該方法
onStart()
Activity的啟動,當你能夠看到Activity時,啟動該方法,
onResume()
當Activity獲取用戶焦點將要與用戶交互時調用此方法,此時activity在activity棧的棧頂,用戶輸入已經可以傳遞給它
onPause()
當系統要啟動一個其他的activity時調用(其他的activity顯示之前),這個方法被用來提交那些持久數據的改變、停止動畫、和其他占用CPU資源的東西。由於下一個activity在這個方法返回之前不會resumed,所以實現這個方法時代碼執行要盡可能快。
如果activity重新回到前景時將調用onResume(), 如果對用戶徹底不可見則會調用onStop()。
onStop()
當另外一個activity恢復並遮蓋住此activity,導致其對用戶不再可見時調用。一個新activity啟動、其它activity被切換至前景、當前activity被銷毀時都會發生這種場景。
當activity重新回到前景與用戶交互時調用onRestart(),如果activity將退出則調用onDestory()。
onDestroy()
在你的activity被銷毀前所調用的最後一個方法,當進程終止時會出現這種情況
onRestart()
當activity從停止狀態重新啟動時調用。其後調用onResume()。