- 相關推薦
android面試題(7)
比如,啟動一個瀏覽器,在Android中是一個比較沉重的過程,它需要做很多初始化的工作,并且會有不小的內(nèi)存開銷。但與此同時,用瀏覽器打開一些內(nèi)容,又是一般應用都會有的一個需求。設想一下,如果同時有十個運行著的應用(就會對應著是多個Task),都需要啟動瀏覽器,這將是一個多么殘酷的場面,十個Task棧都堆積著很雷同的瀏覽器Activity,
是多么華麗的一種浪費啊。
于是你會有這樣一種設想,瀏覽器Activity,可不可以作為一個單獨的Task而存在,不管是來自那個Task的請求,瀏覽器的Task,都不會歸并過去。這樣,雖然瀏覽器Activity本身需要維系的狀態(tài)更多了,但整體的開銷將大大的減少,這種舍小家為大家的行為,還是很值得歌頌的
standard", "singleTop", "singleTask", "singleInstance"。
standard模式, 是默認的也是標準的Task模式,在沒有其他因素的影響下,使用此模式的Activity,會構造一個Activity的實例,加入到調(diào)用者的Task棧中去,對于使用頻度一般開銷一般什么都一般的Activity而言,standard模式無疑是最合適的,因為它邏輯簡單條理清晰,所以是默認的選擇。
而singleTop模式,基本上于standard一致,僅在請求的Activity正好位于棧頂時,有所區(qū)別。此時,配置成singleTop的Activity,不再會構造新的實例加入到Task棧中,而是將新來的Intent發(fā)送到棧頂Activity中,棧頂?shù)腁ctivity可以通過重載onNewIntent來處理新的Intent(當然,也可以無視...)。這個模式,降低了位于棧頂時的一些重復開銷,更避免了一些奇異的行為(想象一下,如果在棧頂連續(xù)幾個都是同樣的Activity,再一級級退出的時候,這是怎么樣的用戶體驗...),很適合一些會有更新的列表Activity展示。一個活生生的實例是,在Android默認提供的應用中,瀏覽器(Browser)的書簽Activity(BrowserBookmarkPage),就用的是singleTop。
singleTask,和singleInstance,則都采取的另辟Task的蹊徑。
標志為singleTask的Activity,最多僅有一個實例存在,并且,位于以它為根的Task中。所有對該Activity的請求,都會跳到該Activity的Task中展開進行。singleTask,很象概念中的單件模式,所有的修改都是基于一個實例,這通常用在構造成本很大,但切換成本較小的Activity中。最典型的例子,還是瀏覽器應用的主Activity(名為Browser...),它是展示當前tab,當前頁面內(nèi)容的窗口。它的構造成本大,但頁面的切換還是較快的,于singleTask相配,還是挺天作之合的。
singleInstance顯得更為極端一些。在大部分時候singleInstance與singleTask完全一致,唯一的不同在于,singleInstance的Activity,是它所在棧中僅有的一個Activity,如果涉及到的其他Activity,都移交到其他Task中進行。這使得singleInstance的Activity,像一座孤島,徹底的黑盒,它不關注請求來自何方,也不計較后續(xù)由誰執(zhí)行。在Android默認的各個應用中,很少有這樣的Activity,在我個人的工程實踐中,曾嘗試在有道詞典的快速取詞Activity中采用過,
是因為我覺得快速取詞入口足夠方便(從notification中點選進入),并且會在各個場合使用,應該做得完全獨立。
大的apk 拆成 很多小的apk
●Activity的 android:taskAffinity=""屬性 姻緣關系
1.配置后 當啟動這個activity時就先去找有沒有activity的親和力屬性相同 有就加入這個
activity所在的任務中沒有就新開任務
2.affinity起作用需要的條件而者具備一個:
1.intent包含F(xiàn)LAG_ACTIVITY_NEW_TASK標記
2.activity元素啟用了allowTaskReparenting屬性.
43. 在Android中,怎么節(jié)省內(nèi)存的使用,怎么主動回收內(nèi)存?
回收已經(jīng)使用的資源,
合理的使用緩存
合理設置變量的作用范圍… application 對象
//未來的某一段時間執(zhí)行
System.gc();
44. 不同工程中的方法是否可以相互調(diào)用?
可以,列舉aidl訪問遠程服務的例子.
45. 在Android中是如何實現(xiàn)判斷區(qū)分電話的狀態(tài),去電,來電、未接來電?
Day8 showAddressService.java
46. dvm的進程和Linux的進程, 應用程序的進程是否為同一個概念
Dvm的進程是dalivk虛擬機進程,每個android程序都運行在自己的進程里面,
每個android程序系統(tǒng)都會給他分配一個單獨的liunx uid(user id),
每個dvm都是linux里面的一個進程.所以說這兩個進程是一個進程.
47. sim卡的EF 文件有何作用
Sim卡相關的東西,沒接觸過
48. 如何判斷是否有SD卡?
配置文件中有sd卡的權限, 通過environment的靜態(tài)方法,
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
49. 嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種, 各有何特性。
頁式,段式,段頁,等 …
50. 什么是嵌入式實時操作系統(tǒng), Android 操作系統(tǒng)屬于實時操作系統(tǒng)嗎?
實時操作系統(tǒng)是指當外界事件或數(shù)據(jù)產(chǎn)生時,能夠接受并以足夠快的速度予以處理,其處理的結果又能在規(guī)定的時間之內(nèi)來控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)作出快速響應,并控制所有實時任務協(xié)調(diào)一致運行的嵌入式操作系統(tǒng)。主要用于工業(yè)控制、軍事設備、航空航天等領域?qū)ο到y(tǒng)的響應時間有苛刻的要求,這就需要使用實時系統(tǒng)。又可分為軟實時和硬實時兩種,而android是基于linux內(nèi)核的,因此屬于軟實時。
硬實時. 火星探測車.
軟實時.
51. 一條最長的短信息約占多少byte?
中文70(包括標點),英文160,160個字節(jié) 這個說法不準確,
要跟手機制式運營商等信息有關.
做實驗,看源碼
ArrayList msgs = sms.divideMessage(message);
for (String msg : msgs) {
【android面試題(7)】相關文章:
android面試題目09-08
Android工程師的面試題08-07
Android工程師面試題10-24
關于Android工程師面試題09-19
Microsoft面試題09-04
iOS面試題07-10
公司面試題09-12
hibernate面試題10-18
英語面試題精選06-13
小升初面試題06-10