国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

基礎一:Activity生命周期

2019-11-09 18:51:49
字體:
來源:轉載
供稿:網友

原文出自:http://blog.csdn.net/liuhe688/article/details/6733407

子曰:溫故而知新,可以為師矣。《論語》

學習技術也一樣,對于技術文檔或者經典的技術書籍來說,指望看一遍就完全掌握,那基本不大可能,所以我們需要經常回過頭再仔細研讀幾遍,以領悟到作者的思想精髓。

近來回顧了一下關于Activity的生命周期,參看了相關書籍和官方文檔,也有了不小的收獲,對于以前的認知有了很大程度上的改善,在這里和大家分享一下。

熟悉javaEE的朋友們都了解servlet技術,我們想要實現一個自己的servlet,需要繼承相應的基類,重寫它的方法,這些方法會在合適的時間被servlet容器調用。其實Android中的Activity運行機制跟servlet有些相似之處,Android系統相當于servlet容器,Activity相當于一個servlet,我們的Activity處在這個容器中,一切創建實例、初始化、銷毀實例等過程都是容器來調用的,這也就是所謂的“Don't call me, I'll call you.”機制。

我們來看一下這一張經典的生命周期流程圖:

相信不少朋友也已經看過這個流程圖了,也基本了解了Activity生命周期的幾個過程,我們就來說一說這幾個過程。

1.啟動Activity:系統會先調用onCreate方法,然后調用onStart方法,最后調用onResume,Activity進入運行狀態。

2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。

3.當前Activity由被覆蓋狀態回到前臺或解鎖屏:系統會調用onResume方法,再次進入運行狀態。

4.當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居后臺:系統會先調用onPause方法,然后調用onStop方法,進入停滯狀態。

5.用戶后退回到此Activity:系統會先調用onRestart方法,然后調用onStart方法,最后調用onResume方法,再次進入運行狀態。

6.當前Activity處于被覆蓋狀態或者后臺不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而后用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。

7.用戶退出當前Activity:系統先調用onPause方法,然后調用onStop方法,最后調用onDestory方法,結束當前Activity。

但是知道這些還不夠,我們必須親自試驗一下才能深刻體會,融會貫通。

下面我們就結合實例,來演示一下生命周期的幾個過程的詳細情況。我們新建一個名為lifecycle的項目,創建一個名為LifeCycleActivity的Activity,如下:

[java] view plain copyPRint?在CODE上查看代碼片派生到我的代碼片package com.scott.lifecycle;    import android.app.Activity;  import android.content.Context;  import android.content.Intent;  import android.os.Bundle;  import android.util.Log;  import android.view.View;  import android.widget.Button;    public class LifeCycleActivity extends Activity {            private static final String TAG = "LifeCycleActivity";      private Context context = this;      private int param = 1;            //Activity創建時被調用      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          Log.i(TAG, "onCreate called.");                    setContentView(R.layout.lifecycle);                    Button btn = (Button) findViewById(R.id.btn);          btn.setOnClickListener(new View.OnClickListener() {              @Override              public void onClick(View v) {                  Intent intent = new Intent(context, TargetActivity.class);                  startActivity(intent);              }          });      }            //Activity創建或者從后臺重新回到前臺時被調用      @Override      protected void onStart() {          super.onStart();          Log.i(TAG, "onStart called.");      }            //Activity從后臺重新回到前臺時被調用      @Override      protected void onRestart() {          super.onRestart();          Log.i(TAG, "onRestart called.");      }            //Activity創建或者從被覆蓋、后臺重新回到前臺時被調用      @Override      protected void onResume() {          super.onResume();          Log.i(TAG, "onResume called.");      }            //Activity窗口獲得或失去焦點時被調用,在onResume之后或onPause之后      /*@Override     public void onWindowFocusChanged(boolean hasFocus) {         super.onWindowFocusChanged(hasFocus);         Log.i(TAG, "onWindowFocusChanged called.");     }*/            //Activity被覆蓋到下面或者鎖屏時被調用      @Override      protected void onPause() {          super.onPause();          Log.i(TAG, "onPause called.");          //有可能在執行完onPause或onStop后,系統資源緊張將Activity殺死,所以有必要在此保存持久數據      }            //退出當前Activity或者跳轉到新Activity時被調用      @Override      protected void onStop() {          super.onStop();          Log.i(TAG, "onStop called.");         }            //退出當前Activity時被調用,調用之后Activity就結束了      @Override      protected void onDestroy() {          super.onDestroy();          Log.i(TAG, "onDestory called.");      }            /**      * Activity被系統殺死時被調用.      * 例如:屏幕方向改變時,Activity被銷毀再重建;當前Activity處于后臺,系統資源緊張將其殺死.      * 另外,當跳轉到其他Activity或者按Home鍵回到主屏時該方法也會被調用,系統是為了保存當前View組件的狀態.      * 在onPause之前被調用.      */      @Override      protected void onSaveInstanceState(Bundle outState) {          outState.putInt("param", param);          Log.i(TAG, "onSaveInstanceState called. put param: " + param);          super.onSaveInstanceState(outState);      }            /**      * Activity被系統殺死后再重建時被調用.      * 例如:屏幕方向改變時,Activity被銷毀再重建;當前Activity處于后臺,系統資源緊張將其殺死,用戶又啟動該Activity.      * 這兩種情況下onRestoreInstanceState都會被調用,在onStart之后.      */      @Override      protected void onRestoreInstanceState(Bundle savedInstanceState) {          param = savedInstanceState.getInt("param");          Log.i(TAG, "onRestoreInstanceState called. get param: " + param);          super.onRestoreInstanceState(savedInstanceState);      }  }  
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌什县| 电白县| 巴里| 扎赉特旗| 连州市| 上栗县| 保德县| 曲沃县| 彭州市| 永登县| 留坝县| 治县。| 自治县| 长子县| 寿阳县| 黔南| 墨玉县| 济阳县| 滨州市| 丽江市| 大宁县| 文水县| 鄂州市| 岚皋县| 嘉义市| 密山市| 石城县| 德化县| 嘉义市| 咸阳市| 绥中县| 墨竹工卡县| 乌兰察布市| 南溪县| 沅陵县| 巴彦淖尔市| 奎屯市| 景谷| 原平市| 务川| 江安县|