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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

基礎(chǔ)一:Activity生命周期

2019-11-09 17:56:33
字體:
供稿:網(wǎng)友

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

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

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

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

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

我們來看一下這一張經(jīng)典的生命周期流程圖:

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

1.啟動(dòng)Activity:系統(tǒng)會(huì)先調(diào)用onCreate方法,然后調(diào)用onStart方法,最后調(diào)用onResume,Activity進(jìn)入運(yùn)行狀態(tài)。

2.當(dāng)前Activity被其他Activity覆蓋其上或被鎖屏:系統(tǒng)會(huì)調(diào)用onPause方法,暫停當(dāng)前Activity的執(zhí)行。

3.當(dāng)前Activity由被覆蓋狀態(tài)回到前臺(tái)或解鎖屏:系統(tǒng)會(huì)調(diào)用onResume方法,再次進(jìn)入運(yùn)行狀態(tài)。

4.當(dāng)前Activity轉(zhuǎn)到新的Activity界面或按Home鍵回到主屏,自身退居后臺(tái):系統(tǒng)會(huì)先調(diào)用onPause方法,然后調(diào)用onStop方法,進(jìn)入停滯狀態(tài)。

5.用戶后退回到此Activity:系統(tǒng)會(huì)先調(diào)用onRestart方法,然后調(diào)用onStart方法,最后調(diào)用onResume方法,再次進(jìn)入運(yùn)行狀態(tài)。

6.當(dāng)前Activity處于被覆蓋狀態(tài)或者后臺(tái)不可見狀態(tài),即第2步和第4步,系統(tǒng)內(nèi)存不足,殺死當(dāng)前Activity,而后用戶退回當(dāng)前Activity:再次調(diào)用onCreate方法、onStart方法、onResume方法,進(jìn)入運(yùn)行狀態(tài)。

7.用戶退出當(dāng)前Activity:系統(tǒng)先調(diào)用onPause方法,然后調(diào)用onStop方法,最后調(diào)用onDestory方法,結(jié)束當(dāng)前Activity。

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

下面我們就結(jié)合實(shí)例,來演示一下生命周期的幾個(gè)過程的詳細(xì)情況。我們新建一個(gè)名為lifecycle的項(xiàng)目,創(chuàng)建一個(gè)名為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創(chuàng)建時(shí)被調(diào)用      @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創(chuàng)建或者從后臺(tái)重新回到前臺(tái)時(shí)被調(diào)用      @Override      protected void onStart() {          super.onStart();          Log.i(TAG, "onStart called.");      }            //Activity從后臺(tái)重新回到前臺(tái)時(shí)被調(diào)用      @Override      protected void onRestart() {          super.onRestart();          Log.i(TAG, "onRestart called.");      }            //Activity創(chuàng)建或者從被覆蓋、后臺(tái)重新回到前臺(tái)時(shí)被調(diào)用      @Override      protected void onResume() {          super.onResume();          Log.i(TAG, "onResume called.");      }            //Activity窗口獲得或失去焦點(diǎn)時(shí)被調(diào)用,在onResume之后或onPause之后      /*@Override     public void onWindowFocusChanged(boolean hasFocus) {         super.onWindowFocusChanged(hasFocus);         Log.i(TAG, "onWindowFocusChanged called.");     }*/            //Activity被覆蓋到下面或者鎖屏?xí)r被調(diào)用      @Override      protected void onPause() {          super.onPause();          Log.i(TAG, "onPause called.");          //有可能在執(zhí)行完onPause或onStop后,系統(tǒng)資源緊張將Activity殺死,所以有必要在此保存持久數(shù)據(jù)      }            //退出當(dāng)前Activity或者跳轉(zhuǎn)到新Activity時(shí)被調(diào)用      @Override      protected void onStop() {          super.onStop();          Log.i(TAG, "onStop called.");         }            //退出當(dāng)前Activity時(shí)被調(diào)用,調(diào)用之后Activity就結(jié)束了      @Override      protected void onDestroy() {          super.onDestroy();          Log.i(TAG, "onDestory called.");      }            /**      * Activity被系統(tǒng)殺死時(shí)被調(diào)用.      * 例如:屏幕方向改變時(shí),Activity被銷毀再重建;當(dāng)前Activity處于后臺(tái),系統(tǒng)資源緊張將其殺死.      * 另外,當(dāng)跳轉(zhuǎn)到其他Activity或者按Home鍵回到主屏?xí)r該方法也會(huì)被調(diào)用,系統(tǒng)是為了保存當(dāng)前View組件的狀態(tài).      * 在onPause之前被調(diào)用.      */      @Override      protected void onSaveInstanceState(Bundle outState) {          outState.putInt("param", param);          Log.i(TAG, "onSaveInstanceState called. put param: " + param);          super.onSaveInstanceState(outState);      }            /**      * Activity被系統(tǒng)殺死后再重建時(shí)被調(diào)用.      * 例如:屏幕方向改變時(shí),Activity被銷毀再重建;當(dāng)前Activity處于后臺(tái),系統(tǒng)資源緊張將其殺死,用戶又啟動(dòng)該Activity.      * 這兩種情況下onRestoreInstanceState都會(huì)被調(diào)用,在onStart之后.      */      @Override      protected void onRestoreInstanceState(Bundle savedInstanceState) {          param = savedInstanceState.getInt("param");          Log.i(TAG, "onRestoreInstanceState called. get param: " + param);          super.onRestoreInstanceState(savedInstanceState);      }  }  
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 柳林县| 咸宁市| 靖安县| 长泰县| 康马县| 太白县| 同心县| 汝州市| 梅州市| 衡水市| 连州市| 湖北省| 湟源县| 多伦县| 云梦县| 慈利县| 湟中县| 合川市| 南宁市| 句容市| 同江市| 临西县| 尖扎县| 龙山县| 顺昌县| 闵行区| 鄂伦春自治旗| 兴国县| 周宁县| 铜山县| 苗栗市| 邹城市| 温泉县| 武陟县| 玛纳斯县| 德化县| 西畴县| 通海县| 泸州市| 岑溪市| 阿尔山市|