Android面试题目整理与讲解
生活随笔
收集整理的這篇文章主要介紹了
Android面试题目整理与讲解
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這一篇文章專門整理一下研究過的Android面試題,內(nèi)容會(huì)隨著學(xué)習(xí)不斷的增加,如果答案有錯(cuò)誤,希望大家可以指正
1.簡(jiǎn)述Activity的生命周期
當(dāng)Activity開始啟動(dòng)的時(shí)候,首先調(diào)用onCreate(),onStart(),onResume()方法,此時(shí)Activity對(duì)用戶來說,是可見的狀態(tài)
當(dāng)Activity從可見狀態(tài)變?yōu)楸籇ialog遮擋的狀態(tài)的時(shí)候,會(huì)調(diào)用onPause()方法,此時(shí)的Activity對(duì)用戶可見,但是不能相 應(yīng)用戶的點(diǎn)擊事件
當(dāng)Activity從可見狀態(tài)變?yōu)楸黄渌腁ctivity完全覆蓋或者是點(diǎn)擊Home進(jìn)入后臺(tái)的時(shí)候,會(huì)依次調(diào)用onPause(),onStop()方法,如果在這個(gè)期間,系統(tǒng)內(nèi)存不足,導(dǎo)致Activity被回收的話,還會(huì)調(diào)用onDestory()方法
當(dāng)Activity從被Dialog遮擋的狀態(tài)恢復(fù)的時(shí)候,會(huì)調(diào)用onResume()方法,從而恢復(fù)可以點(diǎn)擊的狀態(tài)
當(dāng)Activity從被其他Activity遮擋或者是進(jìn)入后臺(tái)狀態(tài)恢復(fù),而且沒有被系統(tǒng)回收的時(shí)候,會(huì)依次調(diào)用onRestart(),onStart(),onResume(),恢復(fù)到可以與用戶進(jìn)行交互的狀態(tài)
當(dāng)Activity從被其他Activity遮擋或者進(jìn)入后臺(tái),而且被系統(tǒng)回收的時(shí)候,相當(dāng)于重新打開一個(gè)Activity,既調(diào)用onCreate(),onStart(),onResume()方法,從而可以與用戶進(jìn)行交互
在onPause()方法執(zhí)行后,系統(tǒng)會(huì)停止動(dòng)畫等消耗 CPU 的操作,同時(shí)我們應(yīng)該在這里保存數(shù)據(jù),因?yàn)檫@個(gè)時(shí)候程序的優(yōu)先級(jí)降低,有可能被系統(tǒng)收回。在這里保存的數(shù)據(jù),應(yīng)該在 onResume 里讀出來,幫用戶恢復(fù)之前的狀態(tài)。
在onDestroy()執(zhí)行后,activity就被真的干掉,可以用 isFinishing()來判斷它,如果此時(shí)有 Progress Dialog顯示,我們應(yīng)該在onDestroy()里 cancel 掉,否則線程結(jié)束的時(shí)候,調(diào)用Dialog 的 cancel 方法會(huì)拋異常。
2.Intent啟動(dòng)Activity有幾種方式,如何實(shí)現(xiàn)?
Intent啟動(dòng)Activity有兩種方式,分別為顯式意圖,隱式意圖 第一種,顯示意圖的實(shí)現(xiàn)。 [java]?view plaincopyprint?
[java]?view plaincopyprint?
這樣我們就一目了然了,其實(shí)我們經(jīng)常使用的Intent的構(gòu)造方法是第二種方式的簡(jiǎn)化版 第二種,是隱式意圖的實(shí)現(xiàn)。 首先我們看一下隱式意圖的調(diào)用方式 [java]?view plaincopyprint?
這樣當(dāng)我們使用setAction的時(shí)候,就可以知道我們到底是想跳轉(zhuǎn)到哪一個(gè)頁面了。
3.Android中獲取圖片有哪幾種方式
方式一 [java]?view plaincopyprint?[java]?view plaincopyprint?
方式三
[java]?view plaincopyprint?
方式四
[java]?view plaincopyprint?
1.?ArrayList,Vector, LinkedList 的存儲(chǔ)性能和特性
ArrayList 和 Vector 都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)據(jù)以便增加和插入元素,它們都允許直接按 序號(hào)索引元素,但是插入元素要涉及數(shù)組元素移動(dòng)等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector 由于使用了 synchroni zed 方法(線程安全),通常性能上較 ArrayList 差,而 LinkedList 使用雙向鏈表實(shí)現(xiàn)存儲(chǔ),按序號(hào)索引數(shù)據(jù)需要進(jìn)行前向或后 向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。?2.Collection 和 Collections 的區(qū)別
Collection 是集合類的上級(jí)接口,繼承與他的接口主要有 Set 和 List. Collections 是針對(duì)集合類的一個(gè)幫助類,他提供一系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索、排序、線程安全化等操作。3.HashMap 和 Hashtable 的區(qū)別
HashMap 是 Hashtable 的輕量級(jí)實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)),他們都完成了 Map 接口,主要區(qū)別在于 HashMap 允許空(null)鍵值(key),由于非線程安全,效率上可能高于 Hashtable。 HashMap 允許將 null 作為一個(gè) entry 的 key 或者 value,而 Hashtable 不允許。? HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和 containsKey。因?yàn)?contains 方法容易讓人引起誤解。 Hashtable 繼承自 Dictionary 類,而 HashMap 是 Java1.2 引進(jìn)的 Map interface 的一個(gè)實(shí)現(xiàn)。 最大的不同是,Hashtable 的方法是 Synchronize 的,而 HashMap 不是,在多個(gè)線程訪問 Hashtable 時(shí),不需要自己為它的 方法實(shí)現(xiàn)同步,而 HashMap 就必須為之提供外同步。 Hashtable 和 HashMap 采用的 hash/rehash 算法都大概一樣,所以性能不會(huì)有很大的差異。?4.sleep() 和 wait() 有什么區(qū)別
sleep 是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時(shí)間,給執(zhí)行機(jī)會(huì)給其他線程,但是監(jiān)控狀態(tài)依然保持,到時(shí) 后會(huì)自動(dòng)恢復(fù)。調(diào)用 sleep 不會(huì)釋放對(duì)象鎖。? wait 是 Object 類的方法,對(duì)此對(duì)象調(diào)用 wait 方法導(dǎo)致本線程放棄對(duì)象鎖,進(jìn)入等待此對(duì)象的等待鎖定池,只有針對(duì)此對(duì)象發(fā) 出 notify 方法(或 notifyAll)后本線程才進(jìn)入對(duì)象鎖定池準(zhǔn)備獲得對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)。?5.Overload 和 Override 的區(qū)別
Overloaded 的方法是否可以改變返回值的類型? 方法的重寫 Overriding 和重載 Overloading 是 Java 多態(tài)性的不同表現(xiàn)。重寫 Overriding 是父類與子類之間多態(tài)性的一種表現(xiàn),重載 Overloading 是一個(gè)類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫 (Overriding)。子類的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類中的定義,對(duì)它而言,父類中的定義如同被"屏蔽"了。如果在一個(gè)類 中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded 的 方法是可以改變返回值的類型。?6.同步和異步有何異同,在什么情況下分別使用他們?
如果數(shù)據(jù)將在線程間共享。例如正在寫的數(shù)據(jù)以后可能被另一個(gè)線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個(gè)線程寫過了, 那么這些數(shù)據(jù)就是共享數(shù)據(jù),必須進(jìn)行同步存取。 當(dāng)應(yīng)用程序在對(duì)象上調(diào)用了一個(gè)需要花費(fèi)很長時(shí)間來執(zhí)行的方法,并且不希望讓程序等待方法的返回時(shí),就應(yīng)該使用異步編程, 在很多情況下采用異步途徑往往更有效率。總結(jié)
以上是生活随笔為你收集整理的Android面试题目整理与讲解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android最全面试题71道题 详解
- 下一篇: 我的android面试经历