Android之Activity生命周期詳細(xì)介紹_第1頁
Android之Activity生命周期詳細(xì)介紹_第2頁
Android之Activity生命周期詳細(xì)介紹_第3頁
Android之Activity生命周期詳細(xì)介紹_第4頁
Android之Activity生命周期詳細(xì)介紹_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Android 之 Activity 生命周期史無前例的詳細(xì)介紹, 新手 必必必看。Android 的 Activity 生命周期是一個(gè)非常重要的知識(shí)點(diǎn), 但是 由于 Activity 的狀態(tài)眾多,而且狀態(tài)直接的切換類型也十分 的眾多,導(dǎo)致Activity 的方法很多,這就給新手學(xué)習(xí)并理解Activity 造成了一定的難度,如果你能認(rèn)真讀完我這一篇博 文,那么我相信你一定能對Activity 的理解達(dá)到一個(gè)嶄新的高度,ok ,下面是我對Activity 的理解。要想透徹的理解 Activity ,那么必須了解一個(gè)計(jì)算機(jī)的名詞,“堆棧” , 因?yàn)?Activity 的狀態(tài)切換方式十分類似于數(shù)據(jù)結(jié)

2、構(gòu)中的堆棧。1、首先介紹什么是堆棧,及其特點(diǎn)。2、介紹Activity 的七個(gè)狀態(tài)方法。結(jié)合堆棧, 詳解 Activity 狀態(tài)直接的切換和各個(gè)方法的調(diào)用。、下面我來介紹一下什么是“堆棧” 。堆棧 可以簡單的理解成一個(gè)的 “竹筒” ,只不過種竹筒是一端封閉另一端開啟的,如圖所示:透過這個(gè)竹筒我們不難發(fā)現(xiàn),因?yàn)槎褩5囊欢耸欠忾]的,所以要想往里面放東西,必須從一端放,取的時(shí)候也只能從一端取,就是這 堆棧最重要的特點(diǎn), “后進(jìn)先出” 。、下面我要介紹的是Activity 的七個(gè)狀態(tài)方法。附官方文檔圖一張:然后附我代碼一篇:package cn.blue.life;import android.app

3、.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.onCre

4、ate(savedInstanceState);this.setContentView(R.layout.main);bt=(Button) this.findViewById(R.id.bt);bt.setText( 第一個(gè) activity);bt.setOnClickListener(new OnClickListener() public void onClick(View v) Intent intent=newIntent(LifteActivity.this,LifteActivitySecond.class);startActivity(intent););Log.i(Myta

5、g,FirstonCreate);protected void onDestroy() Log.i(Mytag,FirstonDestroy);super.onDestroy();protected void onPause() Log.i(Mytag,FirstonPause);super.onPause();protected void onRestart() Log.i(Mytag,FirstonRestart);super.onRestart();protected void onResume() Log.i(Mytag,FirstonResume);super.onResume();

6、protected void onStart() Log.i(Mytag,FirstonStart);super.onStart();protected void onStop() Log.i(Mytag,FirstonStop);super.onStop();/ protected void onRestoreInstanceState(Bundle savedInstanceState) /Log.i(Mytag,First onRestoreInstanceState);/super.onRestoreInstanceState(savedInstanceState);/ / prote

7、cted 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 的初始化, 也就是一個(gè)全新的 Activity 開始時(shí), 調(diào)

8、用該方法onStart()Activity 的啟動(dòng),當(dāng)你能夠看到 Activity 時(shí),啟動(dòng)該方法,onResume()當(dāng) Activity 獲取用戶焦點(diǎn)將要與用戶交互時(shí)調(diào)用此方法,此時(shí) activity 在 activity 棧的棧頂,用戶輸入已經(jīng)可以傳遞給它onPause()當(dāng)系統(tǒng)要啟動(dòng)一個(gè)其他的 activity 時(shí)調(diào)用(其他的 activity 顯示之前) ,這個(gè)方法被用來提交那些持久數(shù)據(jù)的改變、停止動(dòng)畫、和其他占用 CPU 資源的東西。由于下一個(gè)activity 在這個(gè)方法返回之前不會(huì)resumed,所以實(shí)現(xiàn)這個(gè)方法時(shí)代碼執(zhí)行要盡可能快。如果 activity 重新回到前景時(shí)將調(diào)用

9、onResume(), 如果對用戶徹底不可見則會(huì)調(diào)用onStop() 。onStop()當(dāng)另外一個(gè)activity 恢復(fù)并遮蓋住此activity, 導(dǎo)致其對用戶不再可見時(shí)調(diào)用。一個(gè)新activity 啟動(dòng)、其它activity 被切換至前景、當(dāng)前activity 被銷毀時(shí)都會(huì)發(fā)生這種場景。當(dāng) activity 重新回到前景與用戶交互時(shí)調(diào)用 onRestart() , 如果activity 將退出則調(diào)用 onDestory() 。onDestroy()在你的 activity 被銷毀前所調(diào)用的最后一個(gè)方法,當(dāng)進(jìn)程終止時(shí)會(huì)出現(xiàn)這種情況onRestart()當(dāng) activity 從停止?fàn)顟B(tài)重新啟動(dòng)

10、時(shí)調(diào)用。其后調(diào)用onResume()。 3) 、結(jié)合堆棧,詳細(xì)介紹Activity 的生命周期和狀態(tài)切換;下面附上我三個(gè)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;p

11、ublic class LifteActivitySecond 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( 第二個(gè) activity);bt.setOnClickListener(new OnClickListener() public void

12、 onClick(View v) Intent intent=newIntent(LifteActivitySecond.this,LifteActivityDialog.class);startActivity(intent););Log.i(Mytag,Second-onCreate);protected void onDestroy() Log.i(Mytag,Second-onDestroy);super.onDestroy();protected void onPause() Log.i(Mytag,Second-onPause);super.onPause();protected

13、void onRestart() Log.i(Mytag,Second-onRestart);super.onRestart();protected void onResume() Log.i(Mytag,Second-onResume);super.onResume();protected void onStart() Log.i(Mytag,Second-onStart);super.onStart();protected void onStop() Log.i(Mytag,Second-onStop);super.onStop();protected void onRestoreInst

14、anceState(BundlesavedInstanceState) Log.i(Mytag,SecondonRestoreInstanceState);super.onRestoreInstanceState(savedInstanceState);protected void onSaveInstanceState(Bundle outState) Log.i(Mytag,SecondonSaveInstanceState);super.onSaveInstanceState(outState);package cn.blue.life;import android.app.Activi

15、ty;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 LifteActivityDialog extends Activity Button bt;protected void onCreate(Bundle savedInstanceState) super.onCrea

16、te(savedInstanceState);this.setContentView(R.layout.main);bt=(Button) this.findViewById(R.id.bt);bt.setText(一個(gè)小對話框”);bt.setOnClickListener(new OnClickListener() public void onClick(View v) Intent intent=newIntent(LifteActivityDialog.this,LifteActivity.class);startActivity(intent););Log.i(Mytag,Dialo

17、g-onCreate);protected void onDestroy() Log.i(Mytag,Dialog-onDestroy);super.onDestroy();protected void onPause() Log.i(Mytag,Dialog-onPause);super.onPause();protected void onRestart() Log.i(Mytag,Dialog-onRestart);super.onRestart();protected void onResume() Log.i(Mytag,Dialog-onResume);super.onResume

18、();protected void onStart() Log.i(Mytag,Dialog-onStart);super.onStart();protected void onStop() Log.i(Mytag,Dialog-onStop);super.onStop();protected void onRestoreInstanceState(BundlesavedInstanceState) Log.i(Mytag,DialogonRestoreInstanceState);super.onRestoreInstanceState(savedInstanceState);protect

19、ed void onSaveInstanceState(Bundle outState) Log.i(Mytag,DialogonSaveInstanceState);super.onSaveInstanceState(outState);先啟動(dòng)第一個(gè)Activity ,看一下效果我們到看地第一個(gè)Activity 的啟動(dòng),調(diào)用了三個(gè)方法,分別是, onCreate(),onStart(),onResume(),他們分別表示初始化 Activity , 顯示 Activity , 獲取用戶焦點(diǎn),可以進(jìn)行操作。堆棧圖:現(xiàn)在,我們有三種操作方式,分別是:一,點(diǎn)擊后退鍵;二,點(diǎn)擊 home 鍵;三,啟動(dòng)第二個(gè)Activity ;我給大家一一分析這三種情況:第一種情況,后退鍵,將會(huì)把最頂層的 Activity 一從堆棧中移除,的直接銷毀啟動(dòng)到退出,一共執(zhí)行了 6 個(gè)方法,這就是Activity 的生命周期,最簡單,最正常的,沒有任何打斷的生命周期,但是就像人一樣,難免會(huì)生個(gè)病,出個(gè)車禍?zhǔn)裁吹?,所以,下面介紹第二種和第三種;上圖是我點(diǎn)擊了 home 鍵之后的執(zhí)行結(jié)果,我們看到又執(zhí)行了兩個(gè)方法,分別是onPause和onStop,但是并沒有onDestroy ,說明Activity 并沒有被殺掉;而是留在了堆棧之中,處于一種不可見的狀態(tài),

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論