Activty的介紹和相關問題

1.什麼是Activity?

        四大組件之一,通常一個交互界面對應一個activity,activity是Context的子類,同時實現了window.callback和keyevent.callback,可以處理與窗戶用戶交互的事件
 

2.Activity的生命週期
 

Activity從創建到銷燬有多種狀態,從一種狀態到另一種狀態時會激發相應的回掉方法,這種回調方法包括:onCreate,onStart,onResume,onPause,onStop,onDestory

其實這些方法都是兩兩對應的,onCreate創建與onDestroy銷燬;onStart可見與onStop不可見;onResume可編輯(即焦點)與onPause;
這六個方法是對應的,那麼就只剩下onRestart方法了,這個方法在什麼時候調用呢?在Activity被onStop後,但是沒有被onDestory,再次啓動此Activity時時就調用onRestart(而不再調用onCreate)方法;如果被onDestory了,則是調用onCreate方法。

3.Activity的狀態都有哪些?

(1).foreground activity (前臺Activity)

(2).visible activity  (可視Activity)

(3).background activity(後臺Activity)

(4).empty process(空進程)

4.兩個Activity之間跳轉時必須會執行的是哪幾個方法?

        比如說有兩個Activity,分別A,B,當在A裏面激活B組件的時候,A會調用onPause()方法,然後B調用onCreate(),onStart(),onResume()。

這個時候B覆蓋了窗體,A會調用onStop()方法,如果B是個透明的,或者是對話框的樣式,就不會調用A的onStop()方法。
 

5,橫豎屏切換時Activity的生命週期

此時的生命週期跟清單文件裏面的配置有關係。

(1).不設置Activity的android:configChanges時,切屏會重新調用各個生命週期
            默認首先銷燬當前activity,然後重新加載。當橫豎屏切換時先執行onPause/onStop方法.

            需要執行的生命週期:(onPause,onStop,onCreate,onStart,onResume)
(2).設置Activity的android:configChanges="orientation | keyboardHidden | screenSize"時切屏不會重新調用各個生命週期,只會執行onConfigChanged方法。(通常用於遊戲開發,屏幕的朝向都是寫死的)

 

6.如何將一個Activity設置成窗口的樣式?

        只需要給我們的Activity配置如下屬性即可:android:theme=“@android:style/Theme.Dialog”

 

7.如何退出Activity?如何安全退出已調用多個Activity的Application?

1.退出一個Activity只需按返回鍵,我們寫代碼想退出activity直接調用finish()方法就行。
2.記錄打開的Activity:每打開一個Activity,就記錄下來,在需要退出時,關閉每一個Activity即可。

3.發送特定的廣播:在需要結束應用時,發送一個特定的廣播,每個Activity收到廣播後,關閉即可。

4.遞歸退出:在打開新的Activity時使用 startActivityForResult,然後自己加標誌,在onActivityResult中處理,遞歸關閉。

 

8.Activity的啓動模式都有哪些以及各自的特點

        啓動模式在多個Activity跳轉的過程中扮演着重要的角色,它可以決定是否生成新的Activity實例,是否重用已存在的Activity實例,是否和其他Activity實例公用一個task裏。這裏簡單介紹一個task的概念,task是一個具有棧結構的對象,一個task可以管理多個Activity,啓動一個應用,也就創建一個與之對應的task.

        四種啓動模式分別是:

        standard

        singleTop

        singleTask

        singleInstance

(1).standard()

        沒跳轉一個FirstActivity,都會創建一個新的FirstActivity的實例,並且放於棧結構的頂部


(2).singleTop()

        跳轉時系統會先在棧結構中尋找是否有一個FirstActivity實例正位與棧頂,如果有則不再生成新的,直接使用,如果沒有,則生成新的Activity。

 

(3).singleTask()

        在這個跳轉過程中系統發現有存在的FirstActivity,於是不再生成新的實例,而是將FirstActivity之上的Activity實例統統出棧,將FirstActivity變成棧頂對象,顯示在屏幕上。

 

(4).singleInstance()

這個啓動模式比較特殊,因爲它會啓動一個新的棧結構,將Activity放置於這個新的棧結構中,並保證不再有其他Activity實例進入

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章