生活随笔
收集整理的這篇文章主要介紹了
安卓系列转载,有时间可以参考学习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:Activity的生命周期方法
?Android提供了很多Activity的生命周期方法,比如我們常用的onCreate、onPause、onResume等。這里主要介紹粗粒度的周期方法,諸如onPostCreate、onPostResume等
這些細粒度的周期方法可以參考Android的API文檔,在你需要更細層次的控制的時候可以使用這些細粒度的方法。粗粒度的周期方法有以下幾個:
onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy(),從名字上就可以看出來這些方法在什么時候執行。
二:測試Activity的生命周期方法的執行順序
為了能更明白上這幾個周期放的執行順序,我們新建一個HelloWorld項目,在Activity中覆蓋這幾個方法,打印出日志就可以看出來執行順序了
新建HelloWorld項目,詳細步驟可以參見:
Android教程之三:第一個Android應用,HelloWorld
修改main.xml內容為:?
Xml代碼?? <?xml?version="1.0"?encoding="utf-8"?>?? <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"?? ????android:orientation="vertical"?? ????android:layout_width="fill_parent"?? ????android:layout_height="fill_parent"?? ????>?? <TextView???? ????android:layout_width="fill_parent"??? ????android:layout_height="wrap_content"??? ????android:text="第一個Activity"?? ????/>?? <Button??? ????android:id="@+id/second"?? ????android:layout_width="wrap_content"?? ????android:layout_height="wrap_content"?? ????android:text="打開第二個Activity"/>?? </LinearLayout>?? ?
這里主要是為增加一個文本顯示和一個按鈕用于顯示信息和操作。新建布局文件second.xml,內容如下: Xml代碼?? <?xml?version="1.0"?encoding="utf-8"?>?? <LinearLayout?? ??xmlns:android="http://schemas.android.com/apk/res/android"?? ??android:orientation="vertical"?? ??android:layout_width="fill_parent"?? ??android:layout_height="fill_parent">?? ??<TextView???? ????android:layout_width="fill_parent"??? ????android:layout_height="wrap_content"??? ????android:text="第二個Activity"?? ????/>?? <Button??? ????android:id="@+id/exit"?? ????android:layout_width="wrap_content"?? ????android:layout_height="wrap_content"?? ????android:text="退出"/>?? </LinearLayout>?? ?
這里主要是為增加一個文本顯示和一個退出按鈕用于退出當前Activity。新建一個Activity,名字為SecondActivity,內容如下:?
Java代碼?? public?class?SecondActivity?extends?Activity?{?? ????private?final?static?String?TAG="SecondActivity";?? ????@Override?? ????protected?void?onCreate(Bundle?savedInstanceState)?{?? ????????super.onCreate(savedInstanceState);?? ????????Log.v(TAG,?"onCreate");?? ????????setContentView(R.layout.second);?? ?????????? ????????Button?btnExit=(Button)findViewById(R.id.exit);?? ?????????? ????????btnExit.setOnClickListener(new?OnClickListener()?{?? ????????????@Override?? ????????????public?void?onClick(View?v)?{?? ????????????????finish();?? ????????????}?? ????????});?? ????}?? ????@Override?? ????protected?void?onStart()?{?? ????????super.onStart();?? ????????Log.v(TAG,?"onStart");?? ????}?? ????@Override?? ????protected?void?onResume()?{?? ????????super.onResume();?? ????????Log.v(TAG,?"onResume");?? ????}?? ????@Override?? ????protected?void?onPause()?{?? ????????super.onPause();?? ????????Log.v(TAG,?"onPause");?? ????}?? ????@Override?? ????protected?void?onStop()?{?? ????????super.onStop();?? ????????Log.v(TAG,?"onStop");?? ????}?? ????@Override?? ????protected?void?onDestroy()?{?? ????????super.onDestroy();?? ????????Log.v(TAG,?"onDestroy");?? ????}?? ?????? }?? ?
我在各個周期方法了都加了日志信息,便于跟蹤Activity的運行過程修改HelloWorld類,內容如下: Java代碼?? public?class?HelloWorld?extends?Activity?{?? ????private?final?static?String?TAG="HelloWorld";?? ?????? ????@Override?? ????public?void?onCreate(Bundle?savedInstanceState)?{?? ????????super.onCreate(savedInstanceState);?? ????????Log.v(TAG,?"onCreate");?? ????????setContentView(R.layout.main);?? ?????????? ????????Button?btnSecond=(Button)findViewById(R.id.second);?? ?????????? ????????btnSecond.setOnClickListener(new?OnClickListener()?{?? ????????????@Override?? ????????????public?void?onClick(View?v)?{?? ????????????????startActivity(new?Intent(HelloWorld.this,SecondActivity.class));?? ????????????????finish();?? ????????????}?? ????????});?? ????}?? ????@Override?? ????protected?void?onStart()?{?? ????????super.onStart();?? ????????Log.v(TAG,?"onStart");?? ????}?? ????@Override?? ????protected?void?onResume()?{?? ????????super.onResume();?? ????????Log.v(TAG,?"onResume");?? ????}?? ????@Override?? ????protected?void?onPause()?{?? ????????super.onPause();?? ????????Log.v(TAG,?"onPause");?? ????}?? ????@Override?? ????protected?void?onStop()?{?? ????????super.onStop();?? ????????Log.v(TAG,?"onStop");?? ????}?? ????@Override?? ????protected?void?onDestroy()?{?? ????????super.onDestroy();?? ????????Log.v(TAG,?"onDestroy");?? ????}?? }?? 運行程序,分析結果,發現當程序啟動的時候,日志信息為下圖:?
?由此可見當打開一個Activity的時候,其周期方法執行順序為:onCreate()->onStart()->onResume(),現在點擊“打開第二個Activity”按鈕,看日志的輸出如下圖:?
?當應用從Helloworld這個Activity啟動SecondActivity的時候,Android會先執行HelloWorld的onPause方法,然后依次執行SecondActivity的onCreate()->onStart()->onResume()方法
當SecondActivity呈現到屏幕上的時候再一次執行Helloworld的onStop()->onDestroy(),把HelloWorld從Activity棧中移除銷毀。這里值得提的就是HelloWorld 中finish方法,因為執行了他所以
HelloWorld才會從Activity棧中移除銷毀,這樣當你按“返回”鍵返回的時候就回不到HelloWorld 這個Activity的界面了,而是直接回到的Android的應用程序列表?。
三:分析結果
根據上面例子可見一個Activity在啟動的時候會執行onCreate()->onStart()->onResume(),在結束(或離開)的時候會執行onPause()->onStop()->onDestroy(),這就是一個Activity的生命周期。
因此我們要在onCreate方法里把Activity的需要的東西準備好,也就是初始化;在onResume里對Activity里的東西做一些調整;在onPause做一些清理和保存工作(保存持久狀態),因為這是最后的
機會,因為onPause完成之前Android不會結束托管Activity類的進程,而之后進程可能被結束。總結一下這幾個周期方法的作用:
? onCreate():創建Activity調用,用于Activity的初始化,還有個Bundle類型的參數,可以訪問以前存儲的狀態。onStart():Activity在屏幕上對用戶可見時調用onResume():Activity開始和用戶交互的時候調用,這時該Activity是在Activity棧的頂部。onPause():Activity被暫停時調用,也就是你要對你能看到的這個Activity說byebye的時候調用,這里可以做一些清理和保存工作onStop():Activity被停止或者Activity變成不可見時調用onDestroy():Activity被從內存中移除,一般發生在執行finish方法時或者Android回收內存的時候
好了,最后讓我們看一個API提供的Activity的狀態圖吧,看了他相信你對Activity的生命周期會更了解,如下圖:?
?
四:小結
這節主要是通過一個例子分析Activity聲明周期,并對常用生命周期方法做了一些說明,應該什么時候使用他們。到這里Android的很基礎的東西已經說完了,
本文轉載地址:
http://android.group.iteye.com/group/wiki/2890-android-activity-life-cycle
總結
以上是生活随笔為你收集整理的安卓系列转载,有时间可以参考学习的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。