欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android開發(fā)中Activity的生命周期及加載模式詳解

 更新時(shí)間:2016年05月30日 10:49:20   作者:青玉伏案  
這篇文章主要介紹了Android開發(fā)中Activity的生命周期及加載模式詳解的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下

本文給大家介紹Activity的生命周期,如果大家學(xué)習(xí)過iOS的小伙伴的話,Activity的生命周期和iOS中ViewController的生命周期非常類似。生命周期,并不難理解。一個(gè)人的生命周期莫過于生老病死,花兒的生命周期就是花開花謝了。在Android中Activity的生命周期莫過于Activity的創(chuàng)建到消亡的過程了。本篇博客就會(huì)介紹Activity生命周期中的不同階段,通過實(shí)例的形式來窺探一下Activity的生命周期。搞明白Activity的生命周期是至關(guān)重要的,因?yàn)橹挥懈忝靼酌總€(gè)生命周期的每個(gè)階段,你才能在不同段做不同的事情。

接下來我們將通過一個(gè)實(shí)例來介紹Activity的生命周期,在這個(gè)Demo中會(huì)有一個(gè)MainActivity, MainActivity就是App啟動(dòng)后第一個(gè)顯示的Activity。在MainActivity上有一個(gè)按鈕,點(diǎn)擊這個(gè)按鈕就會(huì)跳轉(zhuǎn)到SecondActivity,點(diǎn)擊返回鍵就會(huì)從SecondActivity中返回到MainActivity中,再點(diǎn)擊返回鍵就會(huì)退出App。通過這一些列的Activity的切換,我們將通過打印Log的方式來進(jìn)行觀察Activity的生命周期。

一.代碼編寫

其實(shí)這篇博客的代碼是非常簡單的,就是重寫Activity生命周期不同階段的方法,然后在方法中進(jìn)行Log的打印,從而來標(biāo)記這個(gè)生命周期的階段。而Demo的UI也是灰常的簡單的,所以Activity的layout文件就不做過多的贅述了。接下來看一下兩個(gè)Activity中的關(guān)鍵代碼。

1.下方的代碼是MainActivity中的關(guān)鍵代碼,對Activity生命周期的不同階段進(jìn)行重寫,然后打印日志,標(biāo)記出是哪個(gè)Activity中的哪個(gè)方法。在onCreate()方法中通過id獲取Button, 然后給按鈕綁定上單擊事件,點(diǎn)擊button時(shí)跳轉(zhuǎn)到SecondActivity中。具體代碼如下。

 @Override
   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     Log.d("lifeCycle", "MainActivity: 我是onCreate方法,我會(huì)在Activity第一次被創(chuàng)建是調(diào)用");
     Button jumpButton = (Button) findViewById(R.id.jump_second_button);
     jumpButton.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
         //跳轉(zhuǎn)到SecondActivity
         Intent intent = new Intent(MainActivity.this, SecondActivity.class);
         startActivity(intent);
       }
     });
   }
   //Ctrl + O 選擇父類中的方法進(jìn)行重寫
   @Override
   protected void onStart() {
     super.onStart();
     Log.d("lifeCycle", "MainActivity: 我是onStart方法,我會(huì)在Activity由不可見變?yōu)榭梢姇r(shí)調(diào)用");
   }
   @Override
   protected void onResume() {
     super.onResume();
     Log.d("lifeCycle", "MainActivity: 我是onResume方法,我在Activity處于運(yùn)行狀態(tài)時(shí)調(diào)用");
   }
   @Override
   protected void onPause() {
     super.onPause();
     Log.d("lifeCycle", "MainActivity: 我是onPause方法,我會(huì)在Activity暫停時(shí)調(diào)用");
   }
   @Override
   protected void onStop() {
     super.onStop();
     Log.d("lifeCycle", "MainActivity: 我是onStop方法,我會(huì)在Activity停止時(shí)調(diào)用");
   }
   @Override
   protected void onRestart() {
     super.onRestart();
     Log.d("lifeCycle", "MainActivity: 我是onRestart方法,我會(huì)在Activty從停止?fàn)顟B(tài)變?yōu)檫\(yùn)行狀態(tài)時(shí)調(diào)用");
   }
   @Override
   protected void onDestroy() {
     super.onDestroy();
     Log.d("lifeCycle", "MainActivity: 我是onDestroy方法,我會(huì)在Activty銷毀之前調(diào)用");
   }

2.在SecondActivity中的也是重寫上述方法,唯一的區(qū)別就是把上面日志中的MainActivity改成SecondActivity,代碼類似就不往上粘貼了。

二、運(yùn)行觀察打印的log

運(yùn)行我們的app,然后觀察打印的日志,通過實(shí)例來分析Activity的生命周期。具體步驟如下:

1.創(chuàng)建并激活A(yù)ctivity

首次打開App所打印的Log如下圖所示。打開App首先看到的時(shí)MainActivity, 通過Log我們不難看出在MainActiviy首次出現(xiàn)時(shí)要調(diào)用如下三個(gè)方法,經(jīng)過下方的三個(gè)方法,MainActivty就會(huì)被創(chuàng)建,然后變?yōu)榭梢?,最后處于運(yùn)行狀態(tài)。

(1).onCreate()方法:Activity首次出現(xiàn)創(chuàng)建時(shí)會(huì)調(diào)用該方法,在之前的Demo中我們在此方法中加載Activity的布局和或控件并關(guān)聯(lián)事件。

(2).onStar()t方法:接著就會(huì)執(zhí)行onStart()方法,Activity由不可見狀態(tài)變?yōu)榭梢姞顟B(tài)會(huì)調(diào)用該方法。

(3).onResume方法:Activity變?yōu)榭梢姾蠼又{(diào)用onResume方法來變?yōu)檫\(yùn)行狀態(tài)。

2.Activity間切換

為了更清楚,在點(diǎn)擊按鈕跳轉(zhuǎn)到SecondActivity之前,我們可以清除一下Log, 下方左邊有一個(gè)垃圾桶的標(biāo)志,就是用來清除之前打印的日志的。下方所打印的日志就是點(diǎn)擊跳轉(zhuǎn)按鈕時(shí)所打印的日志。在這個(gè)切換過程中,MianActivty會(huì)停止運(yùn)行變?yōu)椴豢梢?,而SecondActivy就會(huì)被創(chuàng)建并且處于運(yùn)行狀態(tài)。具體步驟如下。

(1).onPause()方法:當(dāng)點(diǎn)擊跳轉(zhuǎn)按鈕時(shí),運(yùn)行中MainActivity就會(huì)調(diào)用onPause()變?yōu)橥V範(fàn)顟B(tài),但仍然可見。

(2).接著就是SecondActivity調(diào)用onCreate()方法進(jìn)行創(chuàng)建,調(diào)用onStart()方法進(jìn)行顯示,調(diào)用onResume()方法進(jìn)行運(yùn)行的過程。

(3).onStop()方法:當(dāng)SecondActivity處于運(yùn)行狀態(tài)時(shí),MainActivity就完全不可見了,所以就會(huì)調(diào)用onStop()方法,進(jìn)入完全不可見停止?fàn)顟B(tài)。

3.從另一個(gè)Activity返回

從SecondActivity中點(diǎn)擊返回鍵,從SecondActivity中返回到MainActivity中。下方的Log是點(diǎn)擊返回按鈕時(shí)所打印的Log.

(1)onPause()方法:點(diǎn)擊返回按鈕后,SecondActivity會(huì)調(diào)用onPause()方法,進(jìn)入暫停運(yùn)行狀態(tài)。

(2)onRestart()方法:接著MainActivity就會(huì)調(diào)用onRestart()方法,由停止?fàn)顟B(tài)變?yōu)檫\(yùn)行狀態(tài)。然后MainActivity又會(huì)調(diào)用onStart方法從不可見變?yōu)榭梢?,接著?huì)調(diào)用onResume()方法最終進(jìn)入運(yùn)行狀態(tài)。

(3)當(dāng)返回到MainActivity中并且MainActivity處于運(yùn)行狀態(tài)后,SecondActivity會(huì)調(diào)用onStop方法,停止運(yùn)行并不可見。因?yàn)镾econdActivty做的事出棧操作,停止運(yùn)行后,就會(huì)調(diào)用onDestory方法進(jìn)行銷毀。下此在進(jìn)入SecondActivity中時(shí),還是從onCreate方法進(jìn)行執(zhí)行。

4.Activity退出并銷毀

接著在MainActivity中點(diǎn)擊返回按鈕就會(huì)退出App了,下方是退出App時(shí)打印的Log信息。MainActivty先調(diào)用onPause()方法變?yōu)闀和_\(yùn)行狀態(tài),然后再調(diào)用onStop()方法停止運(yùn)行,最后調(diào)用onDestroy()方法進(jìn)行銷毀。

三.生命周期流程圖

1.上面是用語言通過實(shí)例打印出的Log來描述兩個(gè)Activity切換的生命周期,接下來將用一個(gè)流程圖來描述這一過程,具體流程圖如下。

2.通過上面的實(shí)例不難分析出一個(gè)Activity的生命周期分為哪些階段,并且很容易的看出哪些階段在什么時(shí)候執(zhí)行,所以我們很容易的畫出一個(gè)Activity的生命周期,下方的流程圖是一個(gè)Activity的生命周期。

四.Activity的加載模式

Activity的啟用模式也較為簡單,它會(huì)在活動(dòng)切換時(shí)用到。Activity的啟動(dòng)模式分為四種,standard、singleTop、singleTask、singleInstance模式。接下來將為大家詳細(xì)的介紹一下這幾種加載模式。

Activity的加載模式可以在配置文件AndroidManifest.xml中進(jìn)行配置,配置項(xiàng)為android:launchMode具體如下圖所示:

1.standard模式

在Activity的棧中無論該活動(dòng)有沒有加入棧,活動(dòng)就會(huì)被創(chuàng)建。測試方式是把MainActivity的launchMode設(shè)置成standard, 在MainActivity中添加一個(gè)按鈕,點(diǎn)擊按鈕使用Intent跳轉(zhuǎn)到當(dāng)前Activity,看onCreate方法中打印的Log。點(diǎn)擊按鈕的方法如下:

 Button launchModelButton = (Button) findViewById(R.id.launch_model_button);
     launchModelButton.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
         Intent intent = new Intent(MainActivity.this, MainActivity.class);
         startActivity(intent);
       }
     });

standard加載模式的棧如下所示,無論棧中有沒有該對象的實(shí)例,都會(huì)被創(chuàng)建。

2.singleTop模式

只要被創(chuàng)建的活動(dòng)不位于棧的頂部,該活動(dòng)就會(huì)被創(chuàng)建入棧。如果將要被創(chuàng)建的活動(dòng)位于棧的頂部,該活動(dòng)的實(shí)例就不會(huì)被創(chuàng)建。測試方法,把上面的模式直接改成singleTop模式,MainActivty往自己身上跳轉(zhuǎn)就不會(huì)從新創(chuàng)建一個(gè)新的實(shí)例,會(huì)重用之前在棧頂中的實(shí)例。如果是MainActivty跳轉(zhuǎn)到SecondActivty, 然后SecondActivity再次跳轉(zhuǎn)到MainActivty, 那么此時(shí)的MainActivity將會(huì)被創(chuàng)建,因?yàn)闂m斒荢econdActivity。如下所示:

3.singleTask模式

單任務(wù)模式,這個(gè)也不難理解,如果從MainActivty跳轉(zhuǎn)到SecondActivity, 如果再從SecondActivty跳轉(zhuǎn)到MainActivity, 在單任務(wù)模式下MainActivity已經(jīng)在棧中,就會(huì)把它之前的Activity出棧,使其處于在棧頂活躍的位置。原理如下圖所示:

4.singleInstance

可以看成單例模式,這個(gè)比較特殊,被設(shè)置成singleInstance的Activity將會(huì)放入另一個(gè)棧中,因?yàn)檫@樣為了便于共用。上面3中模式位于同一個(gè)棧中。下方ThirdActivity跳轉(zhuǎn)到一個(gè)加載模式為singleInstance的Activity中。

  

今天的Activity生命周期就先到這兒,相關(guān)內(nèi)容會(huì)在下篇博客中進(jìn)行更新。  

相關(guān)文章

  • Android App開發(fā)中RecyclerView控件的基本使用教程

    Android App開發(fā)中RecyclerView控件的基本使用教程

    這篇文章主要介紹了Android App開發(fā)中RecyclerView控件的基本使用教程,RecyclerView在Android 5.0之后伴隨著Material Design出現(xiàn),管理布局方面十分強(qiáng)大,需要的朋友可以參考下
    2016-04-04
  • Flutter中http請求抓包的完美解決方案

    Flutter中http請求抓包的完美解決方案

    這篇文章主要給大家介紹了關(guān)于Flutter中http請求抓包的完美解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Flutter具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Android開發(fā)實(shí)現(xiàn)模仿360二維碼掃描功能實(shí)例詳解

    Android開發(fā)實(shí)現(xiàn)模仿360二維碼掃描功能實(shí)例詳解

    這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)模仿360二維碼掃描功能,結(jié)合實(shí)例形式詳細(xì)分析了Android開發(fā)二維碼掃描功能所涉及的zxing開源項(xiàng)目文件使用方法及具體掃碼功能相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • Android緩存之DiskLruCache磁盤緩存的使用

    Android緩存之DiskLruCache磁盤緩存的使用

    這篇文章主要介紹了Android緩存之DiskLruCache磁盤緩存的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • Retrofit 創(chuàng)建網(wǎng)絡(luò)請求接口實(shí)例過程

    Retrofit 創(chuàng)建網(wǎng)絡(luò)請求接口實(shí)例過程

    這篇文章主要為大家介紹了Retrofit 創(chuàng)建網(wǎng)絡(luò)請求接口實(shí)例過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Android Studio 3.3.2 正式版的安裝教程圖解

    Android Studio 3.3.2 正式版的安裝教程圖解

    這篇文章主要介紹了Android Studio 3.3.2 正式版的安裝教程圖解,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2020-02-02
  • MUI整合上拉下拉的寫法

    MUI整合上拉下拉的寫法

    在制作APP的時(shí)候下拉刷新和上拉加載幾乎都是一起使用的,今天以MUI的寫法為例給大家分享一下整合的寫法。
    2017-11-11
  • Android實(shí)現(xiàn)手機(jī)振動(dòng)設(shè)置的方法

    Android實(shí)現(xiàn)手機(jī)振動(dòng)設(shè)置的方法

    這篇文章主要介紹了Android實(shí)現(xiàn)手機(jī)振動(dòng)設(shè)置的方法,涉及Android頁面布局、屬性及功能設(shè)置的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • android 跳轉(zhuǎn)到應(yīng)用通知設(shè)置界面的示例

    android 跳轉(zhuǎn)到應(yīng)用通知設(shè)置界面的示例

    本篇文章主要介紹了android 跳轉(zhuǎn)到應(yīng)用通知設(shè)置界面的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Android 快速使用正則表達(dá)式,校驗(yàn)身份證號的實(shí)例

    Android 快速使用正則表達(dá)式,校驗(yàn)身份證號的實(shí)例

    下面小編就為大家分享一篇Android 快速使用正則表達(dá)式,校驗(yàn)身份證號的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01

最新評論