天天看點

Activity學習筆記

如果所寫内容有錯誤,歡迎提出,我會及時修改。
  • 1、什麼是Activity
    Activity是四大元件之一,使用者可以直接接觸到的四大元件,其繼承自Context抽象類,并實作了Window.CallBack和KeyEvent.CallBack接口,處理使用者與視窗之間的事件。
  • 2、Activity的生命周期

    Activity的狀态有建立和銷毀,可見和不可見,運作和停止,在不同的生命狀态之間切換時,會調用相應的回調方法,主要回調方法有:onCreate,onStart,onResume,onPause,onStop,onDestroy。

    1) 當從一個Activity A跳轉到另一個Activity B時,會調用B的onPause,A的onCreate,onStart,onResume,如果B Activity是非透明且全屏時,還會調用B的onStop方法。

    2) 當Activity不設定 android:configChanges或設定為orientation時,切換橫豎屏時Activity都會從銷毀到重建(onPause->onSaveInstanceState->onStop->onDestroy->onCreate->onStart->onRestoreInstanceState->onResume)。當設定android:configChanges=”orientation|keyboardHidden|screenSize”時,切換橫豎屏時不會執行周期函數,隻會執行onConfigurationChanged方法。

  • 3、Activity的狀态儲存

    當我們麼有覆寫onSaveInstanceState(Bundle)方法時,此方法的預設實作會自動儲存activity中的某些狀态資料, 比如activity中各種UI控件的狀态.。如果沒有為控件指定ID, 則這個控件就不會進行自動的資料儲存和恢複操作。需要注意的是:onSaveInstanceState()方法隻适合儲存瞬态資料, 比如UI控件的狀态, 成員變量的值等,而不應該用來儲存持久化資料。

    會調用onSaveInstanceState的情況有:當使用者按下HOME鍵、長按HOME鍵,選擇運作其他的程式、關閉螢幕顯示、從activity A中啟動一個新的activity、螢幕方向切換。

    注意:onSaveInstanceState和onRestoreInstanceState并不是成對調用的,隻有在Activity銷毀後,才會調用onRestoreInstanceState方法。onSaveInstanceState在onPause之後onStop之前執行,onRestoreInstanceState在onStart之後onPostCreate之前執行。

  • 4、Activity之間參數傳遞

    從前一個Activity A向後一個Activity B中傳參時,直接将參數儲存在Intent中就行了,在B中用getIntent方法擷取啟動B的Intent即可拿到資料。

    需要從B給A傳遞資料時,在啟動Activity B時,使用startActivityForResult方法,而在B finish之前,使用setResult方法将需要傳給A的資料裝在Intent中回傳回去,最後在A中使用onActivityResult方法擷取結果。

  • 5、Activity的啟動模式
1) standard
标準模式,也是系統的預設模式,該模式每次啟動都會在任務棧頂重新建立一個Activity執行個體。
2) singleTop
棧頂複用模式:在啟動Activity時,如果被啟動的Activity就是目前任務棧頂的Activity,那麼會直接啟動該棧頂執行個體,會執行onPause、onNewIntent、onResume方法。如果不是棧頂的Activity,那麼就重新建立一個該Activity。
3) singleTask
棧内複用模式,這是一種棧内單執行個體模式,在這種模式下,隻要Activity在棧中存在,多次啟動該Activity都不會重新建立執行個體,系統會複用棧内的執行個體,并調用onNewIntent函數。當一個具有singleTask模式的Activity A請求啟動後,系統首先會尋找A所需的任務棧是否存在,如果不存在,則建立A所需任務棧,并把A執行個體化後放入該任務棧;如果A所需任務棧存在,則在該棧中尋找是否存在A的執行個體,如果存在,則将A的執行個體移到棧頂(A執行個體上的Activity将會全部移除),會調用onPause、onNewIntent、onResume方法,如果不存在,則建立A的執行個體并壓入棧頂。
4) singleInstance
單執行個體模式,這種模式啟動的Activity,在應用程式中隻會存在一個執行個體,并且該執行個體會單獨占用一個任務棧。每次啟動該Activity時,都不會重新建立執行個體(隻要該執行個體沒有被銷毀),隻會複用該執行個體。

繼續閱讀