1优烧、什么是Activity
Android的四大組件之一蝉揍,context的子類,一個(gè)Activity通常展現(xiàn)為一個(gè)可視化的界面匙隔,是Android程序與用戶交互的窗口疑苫,也是Android組件中最基本也是最復(fù)雜的一個(gè)組件。從視覺(jué)效果來(lái)看纷责,一個(gè)Activity占據(jù)當(dāng)前的窗口,響應(yīng)所有窗口事件撼短,具備有控件再膳,菜單等界面元素。從內(nèi)部邏輯來(lái)看曲横,Activity需要為了保持各個(gè)界面狀態(tài)喂柒,需要做很多持久化的事情,還需要妥善管理生命周期禾嫉,和一些轉(zhuǎn)跳邏輯灾杰。
2、Activity的生命周期
Activity 從創(chuàng)建到銷毀有多種狀態(tài),從一種狀態(tài)到另一種狀態(tài)時(shí)會(huì)激發(fā)相應(yīng) 的回調(diào)方法,這些回調(diào)方法包括:onCreate onStart onResume onPause onStop onDestroy 熙参,如下圖所示:
- onCreate Activity創(chuàng)建時(shí)的初始化工作 如設(shè)置頁(yè)面的ContentView艳吠,控件的初始化,接收參數(shù)等等孽椰。
- onRestart Activity跳轉(zhuǎn)到其他頁(yè)面并執(zhí)行onStop之后昭娩,重新啟動(dòng)時(shí)會(huì)回調(diào)onRestart方法。
- onStart Activity正在啟動(dòng)黍匾,即將開始栏渺,沒(méi)有出現(xiàn)在前臺(tái),還無(wú)法和用戶交互锐涯,可以理解為已經(jīng)初始化完成磕诊,但是處于后臺(tái)我們暫時(shí)沒(méi)法看見(jiàn)。
- onResume Activity可見(jiàn)了并且處于前臺(tái)獲取到焦點(diǎn)(和onStart最大的不同就是onStart是在后臺(tái)已經(jīng)初始化完但是無(wú)法交互)。
- onPause 失去焦點(diǎn)不可以交互霎终、處于后臺(tái)融痛。
- onStop 即將停止,做一些稍微重量級(jí)回收類的工作
- onDestory Activity即將被銷毀神僵,需要們做一些回收和資源釋放類的工作雁刷。
3、后臺(tái)的activity被系統(tǒng)回收怎么辦保礼?如何在被系統(tǒng)回收之前保存當(dāng)前狀態(tài)沛励?
當(dāng)一個(gè)Activity被pause或者stop的時(shí)候,這個(gè)Activity的對(duì)象實(shí)際上還是保存在內(nèi)存中,因此當(dāng) activity 重新回到前臺(tái)之后這個(gè)Activity中的信息(成員和狀態(tài)信息)還可以重新獲取到.
如果系統(tǒng)為了整理內(nèi)存而銷毀了Activity對(duì)象時(shí),系統(tǒng)沒(méi)法簡(jiǎn)單的原封不動(dòng)地恢復(fù)先前的Activity對(duì)象及其狀態(tài)信息.
Activity中提供了一個(gè)方法:onSavedInstanceState(Bundle obj).當(dāng)系統(tǒng)銷毀一個(gè)Activity時(shí),會(huì)將Activity的狀態(tài)信息已鍵值對(duì)形式存放在bundle對(duì)象中.
第一次啟動(dòng)Activity時(shí),這個(gè)bundle對(duì)象是空的,null.如果Activity被系統(tǒng)銷毀了,然后用戶要回退回去看的話,系統(tǒng)會(huì)調(diào)用這個(gè)Activity的onCreate方法,并把bundle對(duì)象傳遞過(guò)去.
4、橫豎屏切換時(shí) Activity 的生命周期
- 不設(shè)置Activity的android:configChanges時(shí)炮障,切屏?xí)匦抡{(diào)用各個(gè)生命周期目派,切橫屏?xí)r會(huì)執(zhí)行一次,切豎屏?xí)r會(huì)執(zhí)行兩次
- 設(shè)置Activity的android:configChanges=”orientation”時(shí)胁赢,切屏還是會(huì)重新調(diào)用各個(gè)生命周期企蹭,切橫、豎屏?xí)r只會(huì)執(zhí)行一次
- 設(shè)置Activity的android:configChanges=”orientation|keyboardHidden”時(shí)智末,切屏不會(huì)重新調(diào)用各個(gè)生命周期谅摄,只會(huì)執(zhí)行onConfigurationChanged方法
5、如何將一個(gè) Activity 設(shè)置成窗口的樣式系馆?
只需要在AndroidManifest.xml給我們的 Activity 配置如下屬性即可送漠。
android:theme=”@android:style/Theme.Dialog”
或者
android:theme="@style/Theme.AppCompat.Dialog"
(根據(jù)api不同選擇)
6 、如何退出 Activity?如何安全退出已調(diào)用多個(gè) Activity 的 Application?
對(duì)于單一 Activity 的應(yīng)用來(lái)說(shuō)由蘑,退出很簡(jiǎn)單闽寡,直接 finish()即可,當(dāng)然尼酿,也可以用 killProcess()和 System.exit()這樣的方法爷狈,為了編程方便,最好定義一個(gè) Activity 基類裳擎,處理這些共通問(wèn)題涎永。
- 記錄打開的 Activity:每打開一個(gè) Activity,就記錄下來(lái)句惯。在需要退出時(shí)土辩,關(guān)閉每一個(gè) Activity 即可。
- 發(fā)送特定廣播:在需要結(jié)束應(yīng)用時(shí)抢野,發(fā)送一個(gè)特定的廣播拷淘,每個(gè) Activity 收到廣播后,關(guān)閉即可指孤。
7启涯、Activity 的四種啟動(dòng)模式,singletop 和 singletask 區(qū)別是什么?一般書簽的使用模式是 singletop,那為什么 不使用 singletask?
- standard: 標(biāo)準(zhǔn)模式贬堵,一調(diào)用 startActivity()方法就會(huì)產(chǎn)生一個(gè)新的實(shí)例。
- singleTop: 如果已經(jīng)有一個(gè)實(shí)例位于 Activity 棧的頂部時(shí)结洼, 就不產(chǎn)生新的實(shí)例黎做, 而只是調(diào)用Activity 中的 newInstance()方法。如果不位于棧頂松忍,會(huì)產(chǎn)生一個(gè)新的實(shí)例蒸殿。
- singleTask: 會(huì)在一個(gè)新的 task 中產(chǎn)生這個(gè)實(shí)例,以后每次調(diào)用都會(huì)使用這個(gè)鸣峭,不會(huì)去產(chǎn)生 新的實(shí)例了宏所。
- singleInstance: 這個(gè)跟 singleTask 基本上是一樣, 只有一個(gè)區(qū)別: 在這個(gè)模式下的 Activity實(shí)例所處的 task 中摊溶,只能有這個(gè) activity實(shí)例爬骤,不能有其他的實(shí)例。
8莫换、Android 中的 Context, Activity,Appliction 有什么區(qū)別?
1.Context 從字面上理解就是上下文的意思霞玄,在實(shí)際應(yīng)用中它也確實(shí)是起到了管理上下文環(huán)境中各個(gè)參數(shù)和變量的總用,方便我們可以簡(jiǎn)單的訪問(wèn)到各種資源拉岁。
2.Activity 和 Application 都是 Context 的子類坷剧。
3.Context 維護(hù)的是當(dāng)前的 Activity 的生命周期,Application 維護(hù)的是整個(gè)項(xiàng)目的生命周期膛薛。
9听隐、Android Service與Activity之間通信的幾種方式?
10哄啄、如果新Activity是透明主題時(shí),舊Activity會(huì)不會(huì)走onStop风范?
答:不會(huì)咨跌。