編輯:Android技術基礎
Activity狀態
隨著Activity的創建和銷毀,也就會進出棧如上圖所示,其中可能會經歷以下四種狀態:
下面再通過一個比喻來看兩個Activity的切換過程。
我們把Activity比作一本書,我們要看書,首先從書架上取出書(onCreate),然後放到桌上(onStart),接著打開書(onResume),這樣我們就可以看書並可以在書本上寫字了。
如果這時候我們要啟動另一個Activity,也就是要看另一本書,首先我們放下手中的筆或者說合上書(onPause),然後從書架上拿下另一本書(書2:onCreate),然後把書本2放到桌上並打開(書2:onStart、onResume)。
如果書本1被書本2完全蓋住了,即不可見了,就調用書本1的onStop;而如果書本2較小,沒有完全蓋住書本1,則不會調用。
我們還可以把書本1放回書架上,即onDestroy。
另外,還有一點要注意,Activity在處於onPause、onStop、onDestroy狀態下,系統都可以銷毀該Activity所在進程,所以我們在處理一些要保存的數據時,必須在onPause方法中進行,因為onStop和onDestroy方法不一定會被調用。
一、設計界面
1、MainActivity布局文件
打開res/layout/activity_main.xml文件。
輸入以下代碼:
2、OtherActivity布局文件
打開res/layout/activity_other.xml文件。
輸入以下代碼:
二、程序文件
1、MainActivity.java
打開“src/com.genwoxue.activitylifecycle/MainActivity.java”文件。
然後輸入以下代碼:
2、OtherActivity.java
打開“src/com.genwoxue.activitylifecycle/OtherActivity.java”文件。
然後輸入以下代碼:
三、配置文件
打開“AndroidManifest.xml”文件。
然後輸入以下代碼:
[html] view plain copy
注意:多Activity需要在AndroidManifest.xml文件中添加以下代碼:
<activity
android:name="com.genwoxue.activitylifecycle.OtherActivity"
android:label="@string/app_name" >
</activity>
四、運行結果
1、第一種情況:運行ActivityLifeCycle—>按“Back”返回鍵:
(1)第一步,創建message過濾器
單擊“+”號按鈕,並在Logcat Message Filter Settings進行如下設置;
(2)第二步,選中LogCat中的“Main”。
(3)第三步,運行主Activity;之後再按“Back”手機返回鍵。
我們認真觀察(結合Activity生命周期圖):
A、第一次運行ActivityLifecycle程序:onPause()、onStop()、onDestroy()執行(上圖紅色背景部分,圖示①)
B、按下“Back”鍵:onPause()、onStop()、onDestroy()執行(上圖藍色背景部分,圖示②)
至此,完成了一個完整的生命周期。
2、第二種情況:運行ActivityLifeCycle—>按“Home”鍵—>再次激活ActivityLifeCycle
(1)第一步,選中LogCat中的“Main”。
(2)第二步,運行主Activity;之後再按“Home”鍵;之後再激活ActivityLifeCycle。
我們認真觀察(結合Activity生命周期圖):
A、第一次運行ActivityLifecycle程序:onPause()、onStop()、onDestroy()執行(上圖紅色背景部分,圖示①)
B、按下“Home”鍵:onPause()、onStop()(上圖綠色背景部分,圖示②)(注意雖然ActivityLifecycle不可見了,但onDestroy()並沒有執行,這意味著還有機會重新回到前台執行)
C、再次激活ActivityLifecycle程序:onRestart()、onStart()、onResume()執行(上圖藍色背景部分,圖示③)(注意激活和第一次運行區別,第一次運行執行了onCreate(),而激活則是onRestart())
至此,重新進入到正常的運行狀態。
以上兩種情況實際上僅僅執行了ActivityLifecycle應用程序中的MainActivity,下面我們學習多個Activity進行交互的生命周期。
3、第三種情況:運行ActivityLifeCycle之MainActivity—>單擊“打開OtherActivity”按鈕—>單擊“返回MainActivity”
(1)第一步,創建message過濾器
單擊“+”號按鈕,並在Logcat Message Filter Settings進行如下設置;
(2)第二步,運行MainActivity;再單擊“打開OtherActivity”;再單擊“返回MainActivity”。
我們認真觀察(結合Activity生命周期圖):
A、第一次運行MainActivity:[M]MainActivity之onPause()、onStop()、onDestroy()執行(上圖紅色背景部分,圖示①)
B、單擊“打開OtherActivity”按鈕:(上圖綠色背景部分,圖示②)
從MianActivity到OtherActivity過程中,我們看到:
Ⅰ、MainActivity從運行狀態,到onPause();
Ⅱ、緊接著[O]OtherActivity執行了onCreate()、onStart()、onResume(),也就意味著此時,OtherActivity接管,其進入了正常的運行態;
Ⅲ、之後MainActivity執行了onStop()狀態。
C、單擊“返回MainActivity”按鈕:(上圖藍色背景部分,圖示③)
從OtherActivity再到MianActivity過程中,我們看到:
Ⅰ、OtherActivity從運行狀態,到onPause();
Ⅱ、緊接著[M]MainActiviy執行了onCreate()、onStart()、onResume(),也就意味著此時,MainActivity接管,其進入了正常的運行態;
Ⅲ、之後OtherActivity執行了onStop()狀態。
以上為多個Activity切換,其生命周期過程。
本節引言:在Canvas的API文檔中,我們看到這樣一個方法:drawBitmap(Bitmap bitmap, Matrix matrix, Pa
本節引言:本節給大家帶來的是Android給我們提供的一個輕量級的用於處理異步任務的類:AsyncTask,我們一般是繼承AsyncTask,然後在
本節引言:本節給大家帶了的是ViewFlipper,它是Android自帶的一個多頁面管理控件,且可以自動播放!和ViewPager不同,ViewP
在Android App應用中,OnFocuChangeListener焦點事件是必不可少的,我們在上一章的基礎上來學習一下如何實現。 基本知識點:OnFocuChan