新聞中心
通過(guò)上一節(jié)“Android系列教程之Android項(xiàng)目的目錄結(jié)構(gòu)”我們已經(jīng)知道了什么是Activity,那么為什么我們創(chuàng)建一個(gè)Activity的導(dǎo)出類的時(shí)候?yàn)槭裁炊家采wActivity的onCreate方法呢,為什么會(huì)在onPause()方法中保存一些當(dāng)前Activity中的變化,要弄明白這些就要先了解Activity的生命周期,也就是一個(gè)Activity才開(kāi)始到結(jié)束都要經(jīng)過(guò)那些狀態(tài),下面通過(guò)一個(gè)例子了解Activity的聲明周期.
創(chuàng)新互聯(lián)專注于海拉爾網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供海拉爾營(yíng)銷型網(wǎng)站建設(shè),海拉爾網(wǎng)站制作、海拉爾網(wǎng)頁(yè)設(shè)計(jì)、海拉爾網(wǎng)站官網(wǎng)定制、微信小程序定制開(kāi)發(fā)服務(wù),打造海拉爾網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供海拉爾網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
一:Activity的生命周期方法
Android提供了很多Activity的生命周期方法,比如我們常用的onCreate、onPause、onResume等。這里主要介紹粗粒度的周期方法,諸如onPostCreate、onPostResume等
這些細(xì)粒度的周期方法可以參考Android的API文檔,在你需要更細(xì)層次的控制的時(shí)候可以使用這些細(xì)粒度的方法。粗粒度的周期方法有以下幾個(gè):
onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy(),從名字上就可以看出來(lái)這些方法在什么時(shí)候執(zhí)行。
二:測(cè)試Activity的生命周期方法的執(zhí)行順序
為了能更明白上這幾個(gè)周期放的執(zhí)行順序,我們新建一個(gè)HelloWorld項(xiàng)目,在Activity中覆蓋這幾個(gè)方法,打印出日志就可以看出來(lái)執(zhí)行順序了
1、新建HelloWorld項(xiàng)目
2、修改activity_main.xml代碼如下:
這里主要是為增加一個(gè)文本顯示和一個(gè)按鈕用于顯示信息和操作。
3、新建布局文件second.xml,內(nèi)容如下:
這里主要是為增加一個(gè)文本顯示和一個(gè)退出按鈕用于退出當(dāng)前Activity。
4、新建一個(gè)Activity,名字為SecondActivity,要在AndroidManifest.xml也聲明一下,否則報(bào)錯(cuò):
SecondActivity類內(nèi)容如下:
import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class SecondActivity extends Activity{ private final static String TAG = "SecondActivity"; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.second); //退出按鈕 Button btnExit = (Button) findViewById(R.id.exit); //為退出按鈕設(shè)置單擊事件 btnExit.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //關(guān)閉當(dāng)前Activity,也就是退出 finish(); } }); } //覆蓋 android.app.Activity.onStart方法 protected void onStart(){ super.onStart(); Log.v(TAG, "onStart"); } //覆蓋 android.app.Activity.onResume protected void onResume(){ super.onResume(); Log.v(TAG, "onResume"); } protected void onPause(){ super.onPause(); Log.v(TAG, "onPause"); } protected void onStop(){ super.onStop(); Log.v(TAG, "onStop"); } protected void onDestroy(){ super.onDestroy(); Log.v(TAG,"onDestroy"); } }
我在各個(gè)周期方法里都加了日志信息,便于跟蹤Activity的運(yùn)行過(guò)程
5、修改HelloWorld類,內(nèi)容如下:
import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class HelloWorld extends Activity { private final static String TAG = "HelloWorld"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //打開(kāi)第二個(gè)Activity的按鈕 Button btnSecond = (Button) findViewById(R.id.second); btnSecond.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //跳轉(zhuǎn)到SecondActivity startActivity(new Intent(HelloWorld.this,SecondActivity.class)); finish();//關(guān)閉當(dāng)前Activity } }); } /* * 重寫(xiě)覆蓋 android.app.Activity里的方法 * */ protected void onStart(){ super.onStart(); Log.v(TAG, "onStart"); } protected void onResume(){ super.onResume(); Log.v(TAG, "onResume"); } protected void onPause(){ super.onPause(); Log.v(TAG, "onPause"); } protected void onStop(){ super.onStop(); Log.v(TAG, "onStop"); } protected void onDestroy(){ super.onDestroy(); Log.v(TAG,"onDestroy"); } }
6、運(yùn)行程序,分析結(jié)果,發(fā)現(xiàn)當(dāng)程序啟動(dòng)的時(shí)候,日志信息為下圖:
由此可見(jiàn)當(dāng)打開(kāi)一個(gè)Activity的時(shí)候,其周期方法執(zhí)行順序?yàn)椋簅nCreate()->onStart()->onResume(),現(xiàn)在點(diǎn)擊“打開(kāi)第二個(gè)Activity”按鈕,看日志的輸出如下圖:
當(dāng)應(yīng)用從Helloworld這個(gè)Activity啟動(dòng)SecondActivity的時(shí)候,Android會(huì)先執(zhí)行HelloWorld的onPause方法,然后依次執(zhí)行SecondActivity的onCreate()->onStart()->onResume()方法
當(dāng)SecondActivity呈現(xiàn)到屏幕上的時(shí)候再一次執(zhí)行Helloworld的onStop()->onDestroy(),把HelloWorld從Activity棧中移除銷毀。這里值得提的就是HelloWorld 中finish方法,因?yàn)閳?zhí)行了他所以
HelloWorld才會(huì)從Activity棧中移除銷毀,這樣當(dāng)你按“返回”鍵返回的時(shí)候就回不到HelloWorld 這個(gè)Activity的界面了,而是直接回到的Android的應(yīng)用程序列表 。
三:分析結(jié)果
根據(jù)上面例子可見(jiàn)一個(gè)Activity在啟動(dòng)的時(shí)候會(huì)執(zhí)行onCreate()->onStart()->onResume(),在結(jié)束(或離開(kāi))的時(shí)候會(huì)執(zhí)行onPause()->onStop()->onDestroy(),這就是一個(gè)Activity的生命周期。
因此我們要在onCreate方法里把Activity的需要的東西準(zhǔn)備好,也就是初始化;在onResume里對(duì)Activity里的東西做一些調(diào)整;在onPause做一些清理和保存工作(保存持久狀態(tài)),因?yàn)檫@是最后的
機(jī)會(huì),因?yàn)閛nPause完成之前Android不會(huì)結(jié)束托管Activity類的進(jìn)程,而之后進(jìn)程可能被結(jié)束??偨Y(jié)一下這幾個(gè)周期方法的作用:
onCreate():創(chuàng)建Activity調(diào)用,用于Activity的初始化,還有個(gè)Bundle類型的參數(shù),可以訪問(wèn)以前存儲(chǔ)的狀態(tài)。
onStart():Activity在屏幕上對(duì)用戶可見(jiàn)時(shí)調(diào)用
onResume():Activity開(kāi)始和用戶交互的時(shí)候調(diào)用,這時(shí)該Activity是在Activity棧的頂部。
onPause():Activity被暫停時(shí)調(diào)用,也就是你要對(duì)你能看到的這個(gè)Activity說(shuō)byebye的時(shí)候調(diào)用,這里可以做一些清理和保存工作
onStop():Activity被停止或者Activity變成不可見(jiàn)時(shí)調(diào)用
onDestroy():Activity被從內(nèi)存中移除,一般發(fā)生在執(zhí)行finish方法時(shí)或者Android回收內(nèi)存的時(shí)候
好了,最后讓我們看一個(gè)API提供的Activity的狀態(tài)圖吧,看了他相信你對(duì)Activity的生命周期會(huì)更了解,如下圖:
四:小結(jié)
這節(jié)主要是通過(guò)一個(gè)例子分析Activity聲明周期,并對(duì)常用生命周期方法做了一些說(shuō)明,應(yīng)該什么時(shí)候使用他們。到這里Android的很基礎(chǔ)的東西已經(jīng)說(shuō)完了!
網(wǎng)頁(yè)標(biāo)題:Android系列教程之Activity的生命周期
網(wǎng)頁(yè)路徑:http://fisionsoft.com.cn/article/pipocc.html