1.什么是Activity官脓?
四大組件之一田巴,通常一個交互界面對應一個activity,activity是Context的子類呼奢,同時實現(xiàn)了window.callback和keyevent.callback,可以處理與窗戶用戶交互的事件
2.Activity的生命周期
Activity從創(chuàng)建到銷毀有多種狀態(tài)酷勺,從一種狀態(tài)到另一種狀態(tài)時會激發(fā)相應的回掉方法戴已,這種回調方法包括:onCreate固该,onStart,onResume,onPause,onStop,onDestory
其實這些方法都是兩兩對應的,onCreate創(chuàng)建與onDestroy銷毀糖儡;onStart可見與onStop不可見伐坏;onResume可編輯(即焦點)與onPause;
這六個方法是對應的握联,那么就只剩下onRestart方法了桦沉,這個方法在什么時候調用呢?在Activity被onStop后金闽,但是沒有被onDestory,再次啟動此Activity時時就調用onRestart(而不再調用onCreate)方法纯露;如果被onDestory了,則是調用onCreate方法代芜。
3.Activity的狀態(tài)都有哪些埠褪?
(1).foreground activity (前臺Activity)
(2).visible activity ?(可視Activity)
(3).background activity(后臺Activity)
(4).empty process(空進程)
4.兩個Activity之間跳轉時必須會執(zhí)行的是哪幾個方法?
? ??? ??比如說有兩個Activity挤庇,分別A,B钞速,當在A里面激活B組件的時候,A會調用onPause()方法嫡秕,然后B調用onCreate()渴语,onStart(),onResume()昆咽。
這個時候B覆蓋了窗體驾凶,A會調用onStop()方法牙甫,如果B是個透明的,或者是對話框的樣式调违,就不會調用A的onStop()方法窟哺。
5,橫豎屏切換時Activity的生命周期
此時的生命周期跟清單文件里面的配置有關系翰萨。
(1).不設置Activity的android:configChanges時脏答,切屏會重新調用各個生命周期
默認首先銷毀當前activity糕殉,然后重新加載亩鬼。當橫豎屏切換時先執(zhí)行onPause/onStop方法.
需要執(zhí)行的生命周期:(onPause,onStop,onCreate,onStart,onResume)
(2).設置Activity的android:configChanges="orientation | keyboardHidden | screenSize"時切屏不會重新調用各個生命周期,只會執(zhí)行onConfigChanged方法阿蝶。(通常用于游戲開發(fā)雳锋,屏幕的朝向都是寫死的)
6.如何將一個Activity設置成窗口的樣式?
只需要給我們的Activity配置如下屬性即可:android:theme=“@android:style/Theme.Dialog”
7.如何退出Activity羡洁?如何安全退出已調用多個Activity的Application?
1.退出一個Activity只需按返回鍵玷过,我們寫代碼想退出activity直接調用finish()方法就行。
2.記錄打開的Activity:每打開一個Activity,就記錄下來筑煮,在需要退出時辛蚊,關閉每一個Activity即可。
3.發(fā)送特定的廣播:在需要結束應用時真仲,發(fā)送一個特定的廣播袋马,每個Activity收到廣播后,關閉即可秸应。
4.遞歸退出:在打開新的Activity時使用 startActivityForResult,然后自己加標志虑凛,在onActivityResult中處理,遞歸關閉软啼。
8.Activity的啟動模式都有哪些以及各自的特點
? ??? ??啟動模式在多個Activity跳轉的過程中扮演著重要的角色桑谍,它可以決定是否生成新的Activity實例,是否重用已存在的Activity實例祸挪,是否和其他Activity實例公用一個task里锣披。這里簡單介紹一個task的概念,task是一個具有棧結構的對象贿条,一個task可以管理多個Activity,啟動一個應用雹仿,也就創(chuàng)建一個與之對應的task.
四種啟動模式分別是:
standard
singleTop
singleTask
singleInstance
(1).standard()
? ??? ??沒跳轉一個FirstActivity,都會創(chuàng)建一個新的FirstActivity的實例,并且放于棧結構的頂部
(2).singleTop()
跳轉時系統(tǒng)會先在棧結構中尋找是否有一個FirstActivity實例正位與棧頂,如果有則不再生成新的闪唆,直接使用盅粪,如果沒有,則生成新的Activity悄蕾。
(3).singleTask()
在這個跳轉過程中系統(tǒng)發(fā)現(xiàn)有存在的FirstActivity,于是不再生成新的實例票顾,而是將FirstActivity之上的Activity實例統(tǒng)統(tǒng)出棧础浮,將FirstActivity變成棧頂對象,顯示在屏幕上奠骄。
(4).singleInstance()
這個啟動模式比較特殊豆同,因為它會啟動一個新的棧結構,將Activity放置于這個新的棧結構中含鳞,并保證不再有其他Activity實例進入