Android面試題整理(附有答案)

Java部分

1.GC是什么? 為什么要有GC?

GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現(xiàn)問題的地方,忘記或者錯誤的內存回收會導致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java 提供的GC功能可以自動監(jiān)測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法。

2.XML包括哪些解釋技術朽肥,區(qū)別是什么?

DOM和SAX

DOM將文檔解析成一顆文檔樹,可在節(jié)點上進行遍歷英古、增加、修改和刪除昙读。一次性讀入內存召调,對內存消耗大。

SAX至上而下解析文檔蛮浑,以事件進行驅動唠叛。不會一次性讀入內存,對內存消耗小沮稚,不能任意讀取節(jié)點艺沼,并且不能對節(jié)點進行增加、修改和刪除蕴掏。

3.switch語句能否作用在byte上障般,能否作用在long上调鲸,能否作用在String上?

switch能作用在byte、char挽荡、short和int上藐石,JDK1.7后可以作用在String上。

4.”==”和equals方法究竟有什么區(qū)別定拟?

==和equals都可以比較地址贯钩。==是運算符,equals是方法办素,方法可以通過重寫改變其行為角雷,如String的equals就是比較字符串內容。

5.構造方法能否被重寫和重載性穿?

構造方法不能被重寫但是能被重載勺三。

6.面向對象的特征有哪些?

封裝需曾、繼承吗坚、多態(tài)和抽象。

7.抽象類和接口的區(qū)別呆万?

1).抽象類是abstract class修飾商源,接口是interface修飾。

2).抽象類可以有任意類型的屬性谋减,接口只能有靜態(tài)常量修飾的屬性牡彻。

3).抽象類可以有普通方法和抽象法方法,接口的方法都是抽象方法出爹。

4).抽象類和接口都不能實例化庄吼,但是抽象類有構造方法,接口沒有構造方法严就。

5).抽象類只能單根繼承总寻,接口可以多重實現(xiàn)。

8.內部類可以引用它的包含類的成員嗎梢为?有沒有什么限制渐行?

可以引用。如果需要指定當前類時要用外部類.this來引用铸董。如果引用局部變量祟印,需要將局部變量指定為final。

9.String s = new String(“xyz”);創(chuàng)建了幾個String Object? 二者之間有什么區(qū)別袒炉?

2個對象旁理。”xyz”創(chuàng)建在字符串常量池中我磁,new String()創(chuàng)建在堆中孽文。

10.try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執(zhí)行夺艰,什么時候被執(zhí)行芋哭,在return前還是后?

會在return前執(zhí)行。

11.Integer與int的區(qū)別

Integer為包裝類郁副,int是基本數據類型减牺。包裝類擁有方法和屬性,基本數據類型不具備存谎。包裝類可以通過intValue來轉換成基本數據類型拔疚,也可以通過new Integer()將基本數據類型轉換為包裝類。在JDK1.5后既荚,包裝類和基本數據類型可以實現(xiàn)自動轉換稚失。

12.sleep()和wait()有什么區(qū)別?

sleep是Thread類的方法,wait是Object類的方法恰聘。

sleep是自動喚醒句各,wait需要其他線程來喚醒。

sleep不會釋放同步鎖晴叨,wait會釋放同步鎖凿宾。

sleep可以用在任意方法中,wait只能用在同步方法或同步塊中兼蕊。

Sleep()不會釋放對象鎖到時自動恢復初厚, wait()會釋放對象鎖 進入等待此對象的等待鎖定池 發(fā)出notify()方法后 才進入等待鎖定池準備對象鎖的獲 取進入運行狀態(tài)

13.同步和異步有何異同,在什么情況下分別使用他們孙技?

同步指同一時間只能一個線程執(zhí)行該方法惧所,其他線程需要等待。異步指多個線程可以同時執(zhí)行某個方法绪杏,并共享同一資源下愈。

同步可以讓訪問的資源具有安全性,因為同一時間只能一個線程對其進行訪問蕾久。但是效率不高势似。

異步對訪問的資源會造成不穩(wěn)定性,比如多個線程同時訪問一個資源僧著,一個在修改履因、一個在刪除、一個在讀取盹愚,這樣可能會造成資源的混亂栅迄。但是由于同時運行, 執(zhí)行效率得到提高皆怕。

14.啟動一個線程是用run()還是start()?

start()方法啟動線程毅舆,run方法是線程執(zhí)行的主方法西篓。

15.java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承憋活,請說出他們分別是哪些類岂津?

java中有三種流,分別是字節(jié)流(InputStream悦即、OutputStream)吮成、字符流(Reader、Writer)辜梳、對象流(ObjectInputStream粱甫、 ObjectOutputStream)。

16.字節(jié)流與字符流的區(qū)別作瞄?

字節(jié)流用于讀取或寫出二進制數據茶宵,比如圖片、影像等數據粉洼。

字符流用于讀取或寫出字符數據节预,比如傳輸字符串。

所有的數據都可以通過字節(jié)流來進行處理属韧,不過如果是字符數據安拟,用字節(jié)流還需要進行轉換后傳輸,如果使用字符流可以方便數據的轉換宵喂。

17.error和exception有什么區(qū)別?

error是系統(tǒng)錯誤糠赦,代碼不能處理的錯誤,比如內存溢出锅棕、堆棧溢出等拙泽。

exception是程序異常,可以通過代碼try-catch進行處理裸燎,比如空指針異常顾瞻,數組越界等。

18.談談final,finally,finalize的區(qū)別德绿?

final是修飾符荷荤,可以修飾類(不能被繼承)、屬性(常量)移稳、和方法(不能被重寫)蕴纳。

finally是異常處理塊中的代碼塊,表示無論如何都會執(zhí)行的代碼塊个粱。

finalize是Object類的方法古毛,該方法在對象被垃圾回收之前執(zhí)行的方法。

19.當一個線程進入一個對象的一個synchronized方法后都许,其它線程是否可進入此對象的其它方法?

如果其他方法沒有加synchronized的話是可以進入的稻薇。

20.當一個對象被當作參數傳遞到一個方法后嫂冻,此方法可改變這個對象的屬性,并可返回變化后的結果颖低,那么這里到底是值傳遞還是引用傳遞?

java中只有值傳遞絮吵,如果傳遞的對象弧烤,實際也是傳遞該對象的地址忱屑。

21.作用域public,private,protected,以及不寫時的區(qū)別

public公共修飾符,表示任意類都可以訪問暇昂。

protected為受保護的修飾符莺戒,表示同類、同包以及不同包但是父子關系的是可以訪問急波。

不寫表示默認修飾符从铲,或者稱為package修飾符,該修飾符表示只有同類或同包下的類可以訪問澄暮,出了這個包就不能訪問了名段。

private為私有修飾符,表示只有同類中可以訪問泣懊,出了這個類就不能訪問了伸辟。

22.用最有效率的方法算出2乘以8等於幾 2《 3

將2的二進制向左移3位。java中用<<來移位馍刮。

23.heap和stack有什么區(qū)別信夫。

heap表示堆,stack表示棧卡啰。堆中放對象静稻,棧中放引用變量。

堆空間是一個無序的空間匈辱,棧是先進后出的結構振湾。

24.運行時異常與一般異常有何異

運行時異常是指繼承于RuntimeException的異常,這些異常在編譯時可以不進行處理亡脸,當運行時如果出現(xiàn)問題才會拋出押搪。如NullPointException、 ArrayIndexOutOfBoundsException

一般異常也稱為編譯時異常梗掰,這些異常是繼承Exception但又不屬于RuntimeException的子類嵌言,如果程序中出現(xiàn)這些異常,在編譯時必須進行捕獲或拋出及穗,否 則編譯無法通過摧茴。如IOException、FileNotFoundException

25.垃圾回收的優(yōu)點和原理埂陆。并考慮2種回收機制

Java語言中一個顯著的特點就是引入了垃圾回收機制苛白,使c++程序員最頭疼的內存管理的問題迎刃而解娃豹,它使得Java程序員在編寫程序的時候不再需要考慮內存 管理。由于有個垃圾回收機制购裙,Java中的對象不再有”作用域”的概念懂版,只有對象的引用才有”作用域”。垃圾回收可以有效的防止內存泄露躏率,有效的使用可以使用 的內存躯畴。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收薇芝,程序員不能 實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收蓬抄。回收機制有分代復制垃圾回收和標記垃圾回收夯到,增量垃圾回收嚷缭。

26.描述一下JVM加載class文件的原理機制?

JVM中類的裝載是由ClassLoader和它的子類來實現(xiàn)的,Java ClassLoader 是一個重要的Java運行時系統(tǒng)組件。它負責在運行時查找和裝入類文件的類耍贾。

27.是否可以從一個static方法內部發(fā)出對非static方法的調用阅爽?

不能,除非先創(chuàng)建非static方法所在類的對象荐开。

28.什么是java序列化付翁,如何實現(xiàn)java序列化?

序列化就是一種用來處理對象流的機制誓焦,所謂對象流也就是將對象的內容進行流化胆敞。可以對流化后的對象進行讀寫操作杂伟,也可將流化后的對象傳輸于網絡之間移层。序 列化是為了解決在對對象流進行讀寫操作時所引發(fā)的問題。

序列化的實現(xiàn):將需要被序列化的類實現(xiàn)Serializable接口赫粥,該接口沒有需要實現(xiàn)的方法观话,implements Serializable只是為了標注該對象是可被序列化 的,然后使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象越平,接著频蛔,使用ObjectOutputStream對象的 writeObject(Object obj)方法就可以將參數為obj的對象寫出(即保存其狀態(tài)),要恢復的話則用輸入流秦叛。

29.Anonymous Inner Class(匿名內部類)是否可以extends(繼承)其它類晦溪,是否可以implements(實現(xiàn))interface(接口)?

匿名內部類可以繼承類或實現(xiàn)接口挣跋,但不是顯示的使用extends或implements來繼承或實現(xiàn)三圆。

30.ArrayList和Vector的區(qū)別,HashMap和Hashtable的區(qū)別?

ArrayList是JDK1.2的集合類并且線程不安全,Vector是1.0的集合類并且線程安全舟肉,二者用法類似修噪。

HashMap線程不安全且能放空鍵或空值,Hashtable線程安全且不能放空鍵或空值路媚。

31.String 和StringBuffer有什么差別黄琼?在什么情況下使用它們?

String字符串的基本類整慎,該字符串是不可變的脏款。StringBuffer是利用堆來存儲字符串,并且可以對字符串的內容進行改變院领。

32.new一個類對象和使用類名創(chuàng)建一個對象有什么區(qū)別弛矛?二者使用時應該注意什么够吩?

new對象是最常見的創(chuàng)建對象的方式比然,利用類模板是通過反射來創(chuàng)建對象。雖然new對象時在底層也會通過類模板來創(chuàng)建對象周循,但是new對象的效率要比直接通過類 模板創(chuàng)建對象的方式要高强法。

但是使用類模板的方式可以讓程序的靈活性提高。

33.LinkedList和ArrayList的區(qū)別湾笛?

1)LinkedList是鏈表結構的集合饮怯,ArrayList數組結構的集合。

2)LinkedList在中間或前面增加或刪除數據時效率比ArrayList高嚎研。

3)LinkedList在最后添加或刪除數據時效率比ArrayList低蓖墅。

4)遍歷數據時ArrayList效率高于LinkedList。

34.介紹JAVA開發(fā)中常用的Collection FrameWork(集合框架)?

Java中集合框架分為Collection和Map接口临扮,Collection接口下的集合每個元素都由一個值組成论矾,Map接口下的集合類每個元素都是由鍵值對組成。

Collection接口下面有List和Set接口杆勇,List接口下常見的類有ArrayList贪壳、LinkedList、Vector蚜退。它們中的元素可以重復闰靴,并且是有序的。Set接口下常 見的類有HashSet钻注、TreeSet蚂且。它們中的元素不能重復,并且是無序的幅恋。

35.在異常當中 throw和throws 有什么區(qū)別和聯(lián)系杏死?

throw是在代碼中拋出一個異常,后面跟的是異常對象,虛擬機運行到這里時會立即引發(fā)一個異常识埋。

throws是寫在方法聲明上的凡伊,表示聲明該方法可能會拋出異常,后面跟的是異常類型窒舟。調用該方法的時候可以選擇處理它或繼續(xù)往外拋系忙。

36.重載和重寫的區(qū)別

重載是指在一個類中,兩個或兩個以上的方法具有相同方法名和不同參數列表惠豺,則表示這些方法為重載方法银还。

重寫是指在父類和子類中,子類的方法和父類的方法具有相同方法名洁墙、相同參數列表蛹疯、相同返回類型、子類的訪問修飾符范圍不小于父類的訪問修飾符范圍热监,異常 的類型和個數不大于或多于父類的異常類型和個數捺弦,則表示該方法為重寫方法。換句話說重載方法是區(qū)分同一個類中相同方法名的方法孝扛,重寫方法是找到父類相同 方法名的方法并重新改變方法的行為列吼。

37.Java中try catch finally的執(zhí)行順序

先執(zhí)行try中代碼發(fā)生異常執(zhí)行catch中代碼,最后一定會執(zhí)行finally中代碼

38.內存泄露的原因:

資源對象沒關閉苦始。

如Cursor寞钥、File等資源。他們會在finalize中關閉陌选,但這樣效率太低理郑。容易造成內存泄露。

SQLiteCursor咨油,當數據量大的時候容易泄露

使用Adapter時您炉,沒有使用系統(tǒng)緩存的converView。

即時調用recycle()釋放不再使用的Bitmap臼勉。

適當降低Bitmap的采樣率邻吭,如:

BitmapFactory.Options options = newBitmapFactory.Options();

options.inSampleSize = 2;//圖片寬高都為原來的二分之一,即圖片為原來的四分之一

Bitmap bitmap =BitmapFactory.decodeStream(cr.openInputStream(uri), null, options); preview.setImageBitmap(bitmap);

使用application的context來替代activity相關的context宴霸。

盡量避免activity的context在自己的范圍外被使用囱晴,這樣會導致activity無法釋放。

注冊沒取消造成內存泄露

如:廣播

集合中的對象沒清理造成的內存泄露我們通常把一些對象的引用加入到了集合中瓢谢,當我們不需要該對象時畸写,并沒有把它的引用從集合中清理掉,這樣這個集合就會 越來越大氓扛。如果這個集合是static的話枯芬,那情況就更嚴重了论笔。

Handler應該申明為靜態(tài)對象, 并在其內部類中保存一個對外部類的弱引用千所。如下:

static class MyHandler extends Handler

{

WeakReference mActivityReference;

MyHandler(Activity activity)

{

? ? ? mActivityReference= new WeakReference(activity);

}

@Override

public void handleMessage(Message msg)

{

final Activity activity = mActivityReference.get();

if (activity != null)

{

? ? ? mImageView.setImageBitmap(mBitmap);

}? ?

}

}

39.Iterator和Enumeration的不同

函數接口不同

Enumeration只有2個函數接口狂魔。通過Enumeration,我們只能讀取集合的數據淫痰,而不能對數據進行修改最楷。 Iterator只有3個函數接口。Iterator除了能讀 取集合的數據之外待错,也能數據進行刪除操作籽孙。

Iterator支持fail-fast機制,而Enumeration不支持火俄。 Enumeration 是JDK 1.0添加的接口犯建。使用到它的函數包括Vector、Hashtable等類瓜客,這些類 都是JDK 1.0中加入的适瓦,Enumeration存在的目的就是為它們提供遍歷接口。Enumeration本身并沒有支持同步忆家,而在Vector犹菇、Hashtable實現(xiàn) Enumeration時,添加了同步芽卿。而Iterator 是JDK 1.2才添加的接口,它也是為了HashMap胳搞、ArrayList等集合提供遍歷接口卸例。

Iterator是支持fail-fast 機制的:當多個線程對同一個集合的內容進行操作時,就可能會產生fail-fast事件肌毅。

ail-fast 機制是java集合(Collection)中的一種錯誤機制筷转。當多個線程對同一個集合的內容進行操作時,就可能會產生fail-fast事件悬而。例如:當某一個線 程A通過iterator去遍歷某集合的過程中呜舒,若該集合的內容被其他線程所改變了;那么線程A訪問集合時笨奠,就會拋出ConcurrentModificationException異 常袭蝗,產生fail-fast事件。

40.接口的注意點

接口中的字段全部默認為 public static類型般婆。

接口中的方法全部默認為 public類型到腥。

接口中可以申明內部類,而默認為public static蔚袍,正因為是static乡范,只是命名空間屬于接口,代碼邏輯不屬于接口。所以不違法接口定義晋辆。

接口本身可以申明為public或者缺省渠脉。

抽象類繼承自某接口。如果在抽象類中實現(xiàn)了父類(接口)中的方法瓶佳,在其子類可以不用實現(xiàn)连舍,否則在子類必須實現(xiàn)。

41.final方法

將方法聲明為final那有兩個原因涩哟,第一就是說明你已經知道這個方法提供的功能已經滿足你要求索赏,不需要進行擴展,并且也不允許任何從此類繼承的類來覆寫這個方法贴彼,但是繼承仍然可以繼承這個方法潜腻,也就是說可以直接使用。第二就是允許編譯器將所有對此方法的調用轉化為inline調用的機制器仗,它會使你在調用final方法時融涣,直接將方法主體插入到調用處,而不是進行例行的方法調用精钮,例如保存斷點威鹿,壓棧等,這樣可能會使你的程序效率有所提高轨香,然而當你的方法主體非常龐大時忽你,或你在多處調用此方法,那么你的調用主體代碼便會迅速膨脹臂容,可能反而會影響效率科雳,所以你要慎用final進行方法定義。

ANDROID部分

1.activity脓杉、Service糟秘、BroadcastReceiver的作用(android)

Activity:Activity是Android程序與用戶交互的窗口,是Android構造塊中最基本的一種球散,它需要為保持各界面的狀態(tài)尿赚,做很多持久化的事情,妥善管理生命周期以及一些跳轉邏輯

service:后臺服務于Activity蕉堰,封裝有一個完整的功能邏輯實現(xiàn)凌净,接受上層指令,完成相關的指令嘁灯,定義好需要接受的Intent提供同步和異步的接口

BroadCast Receiver:接受一種或者多種Intent作觸發(fā)事件泻蚊,接受相關消息,做一些簡單處理丑婿,轉換成一條Notification性雄,統(tǒng)一了Android的事件廣播模型

2.描述一個完整的Android activity lifecycle

activity的生命周期方法有:onCreate()没卸、onStart()、onReStart()秒旋、onResume()约计、onPause()、onStop()迁筛、onDestory()煤蚌;

3.顯式intent和隱式intent的區(qū)別是什么(android)

Intent定義:Intent是一種在不同組件之間傳遞的請求消息,是應用程序發(fā)出的請求和意圖细卧。作為一個完整的消息傳遞機制尉桩,Intent不僅需要發(fā)送端,還需要接收端贪庙。

顯式Intent定義:對于明確指出了目標組件名稱的Intent蜘犁,我們稱之為顯式Intent。

隱式Intent定義:對于沒有明確指出目標組件名稱的Intent止邮,則稱之為隱式Intent这橙。

說明:Android系統(tǒng)使用IntentFilter 來尋找與隱式Intent相關的對象。

4.Android中線程同步的方法

線程同步的方法可以采用同步方法和同步塊导披。

5.怎么將一個Activity封裝成對話框的樣子? 怎樣將Activity封裝成長按Menu菜單的樣子屈扎?

簡單你只需要設置 一下Activity的主題就可以了在AndroidManifest.xml 中定義 Activity的地方一句話:

Xml代碼

android :theme=”@android:style/Theme.Dialog”

android:theme=”@android:style/Theme.Dialog”

這就使你的應用程序變成對話框的形式彈出來了,或者

Xml代碼

android:theme=”@android:style/Theme.Translucent”

android:theme=”@android:style/Theme.Translucent”

就變成半透明的撩匕。

重寫OnCreateOptionMenu方法來處理按下menu后的行為鹰晨,然后再該方法中彈出對話框形式的Activity。

也可以利用事件監(jiān)聽來監(jiān)聽menu按鍵滑沧,并在該按鈕按下后彈出對話框形式的Activity氛堕。

6.介紹一下Android系統(tǒng)的體系結構

應用層:android的應用程序通常涉及用戶界面和交互网持。

應用框架層:UI組件、各種管理器等冯吓。

函數庫層:系統(tǒng)C庫棚潦、媒體庫令漂、webkit、SQLite等丸边。

linux核心庫:linux系統(tǒng)運行的組件叠必。

7.描述下橫豎屏切換時候 activity 的生命周期

不設置Activity的android:configChanges時,切屏會重新調用各個生命周期,切橫屏時會執(zhí)行一次,切豎屏時會執(zhí)行兩次.

設置Activity的android:configChanges=”orientation”時,切屏還是會重新調用各個生命周期,切橫、豎屏時只會執(zhí)行一次.

設置Activity的android:configChanges=”orientation|keyboardHidden”時,切屏不會重新調用各個生命周期,只會執(zhí)行onConfigurationChanged方法.

8.android 中的動畫有哪幾種妹窖,它們的特點和區(qū)別是什么 ?

兩種纬朝,一種是補間動畫(Tween)動畫、還有一種是幀動畫(Frame)動畫骄呼。Tween動畫共苛,這種實現(xiàn)方式可以使視圖組件移動判没、放大、縮小以及產生透明度的變化;另一種Frame動畫隅茎,傳統(tǒng)的動畫方法澄峰,通過順序的播放排列好的圖片來實現(xiàn),類似電影辟犀。

9.一條最長的短信息約占多少 byte?

140byte俏竞,70個漢字。

10.描述handler 機制的原理

andriod提供了 Handler 和 Looper 來滿足線程間的通信堂竟。

Handler 先進先出原則魂毁。

Looper類用來管理特定線程內對象之間的消息交換(Message Exchange)。

1)Looper: 一個線程可以產生一個Looper對象出嘹,由它來管理此線程里的Message Queue(消息隊列)席楚。

2)Handler: 你可以構造Handler對象來與Looper溝通,以便push新消息到Message Queue里;或者接收Looper從Message Queue取出)所送來的消息疚漆。

3) Message Queue(消息隊列):用來存放線程放入的消息酣胀。

4)線程:UI thread 通常就是main thread,而Android啟動程序時會替它建立一個Message Queue娶聘。

11.如何將 SQLite 數據庫 (dictionary.db 文件 ) 與 apk 文件一起發(fā)布 ?

可以將dictionary.db文件復制到Eclipse Android工程中的res\raw目錄中闻镶。所有在res\raw目錄中的文件不會被壓縮,這樣可以直接提取該目錄中的文件丸升。

使用openDatabase方法來打開數據庫文件铆农,如果該文件不存在,系統(tǒng)會自動創(chuàng)建/sdcard/dictionary目錄狡耻,并將res\raw目錄中的 dictionary.db文件復制到/sdcard/dictionary目錄中

12.說說 android 中 mvc 的具體體現(xiàn)

mvc是model,view,controller的縮寫墩剖,mvc包含三個部分:

模型(model)對象:是應用程序的主體部分,所有的業(yè)務邏輯都應該寫在該層夷狰。

視圖(view)對象:是應用程序中負責生成用戶界面的部分岭皂。也是在整個mvc架構中用戶唯一可以看到的一層,接收用戶的輸入沼头,顯示處理結果爷绘。

控制器(control)對象:是根據用戶的輸入,控制用戶界面數據顯示及更新model對象狀態(tài)的部分进倍,控制器更重要的一種導航功能土至,響應用戶出發(fā)的相關事件,交給m層處理猾昆。

android鼓勵弱耦合和組件的重用陶因,在android中mvc的具體體現(xiàn)如下:

1)視圖(view):一般采用xml文件進行界面的描述,使用的時候可以非常方便的引入垂蜗。

2)控制層(controller):android的控制層的重任通常落在了眾多的acitvity的肩上楷扬,這句話也就暗含了不要在acitivity中寫過多的代碼解幽,要通過activity交割model業(yè)務邏輯層處理,這樣做的另外一個原因是android中的acitivity的響應時間是5s毅否,如果耗時的操作放在這里亚铁,程序就很容易被回收掉。

3)模型層(model):對數據庫的操作螟加、對網絡等的操作都應該在model里面處理徘溢,當然對業(yè)務計算等操作也是必須放在的該層的。

13.請介紹下 Android 中常用的五種布局

幀布局(FrameLayout)

線性布局(LinearLayout)

表格布局(TableLayout)

相對布局(RelativeLayout)

絕對布局(AbsoluteLayout)

14.如何啟用 Service 捆探,如何停用 Service

1)startService用于啟動Service然爆、stopService停止Service。

2)bindService綁定Service黍图,unbindService解除Service的綁定曾雕。

15.如何優(yōu)化ListView

1、如果自定義適配器助被,那么在getView方法中要考慮方法傳進來的參數contentView是否為null剖张,如果為null就創(chuàng)建contentView并返回,如果不為null則直接使用揩环。在這個方法中盡可能少創(chuàng)建view搔弄。

2、給contentView設置tag(setTag())丰滑,傳入一個viewHolder對象顾犹,用于緩存要顯示的數據,可以達到圖像數據異步加載的效果褒墨。

3炫刷、如果listview需要顯示的item很多,就要考慮分頁加載郁妈。比如一共要顯示100條或者更多的時候浑玛,我們可以考慮先加載20條,等用戶拉到列表底部的時候再去加載接下來的20條噩咪。

16.描述4 種 activity 的啟動模式

1)standard :系統(tǒng)的默認模式锄奢,一次跳轉即會生成一個新的實例。假設有一個activity命名為MainActivity剧腻,執(zhí)行語句:

startActivity(new Intent(MainActivity.this, MainActivity.class))后,MainActivity將跳轉到另外一個MainActivity涂屁,也就是現(xiàn)在的Task棧里面有MainActivity的兩個實例书在。按返回鍵后你會發(fā)現(xiàn)仍然是在MainActivity(第一個)里面。

2)singleTop:singleTop 跟standard 模式比較類似拆又。如果已經有一個實例位于Activity棧的頂部時儒旬,就不產生新的實例栏账,而只是調用Activity中的newInstance()方法。如果不位于棧頂栈源,會產生一個新的實例挡爵。例:當MainActivity為 singleTop 模式時,執(zhí)行跳轉后棧里面依舊只有一個實例甚垦,如果現(xiàn)在按返回鍵程序將直接退出茶鹃。

3)singleTask: singleTask模式和后面的singleInstance模式都是只創(chuàng)建一個實例的。在這種模式下艰亮,無論跳轉的對象是不是位于棧頂的activity闭翩,程序都不會生成一個新的實例(當然前提是棧里面已經有這個實例)。這種模式相當有用迄埃,在以后的多activity開發(fā)中疗韵,經常會因為跳轉的關系導致同個頁面生成多個實例,這個在用戶體驗上始終有點不好侄非,而如果你將對應的activity聲明為 singleTask 模式蕉汪,這種問題將不復存在。

4)singleInstance: 設置為 singleInstance 模式的 activity 將獨占一個task(感覺task可以理解為進程)逞怨,獨占一個task的activity與其說是activity者疤,倒不如說是一個應用,這個應用與其他activity是獨立的骇钦,它有自己的上下文activity宛渐。

17.什么是Intent,如何使用眯搭?

Android基本的設計理念是鼓勵減少組件間的耦合窥翩,因此Android提供了Intent (意圖) ,Intent提供了一種通用的消息系統(tǒng)鳞仙,它允許在你的應用程序與其它的應用程序間傳遞Intent來執(zhí)行動作和產生事件寇蚊。使用Intent可以激活Android應用的三個核心組件:活動、服務和廣播接收器棍好。

通過startActivity() orstartActivityForResult()啟動一個Activity仗岸;

過 startService() 啟動一個服務,或者通過bindService() 和后臺服務交互借笙;

通過廣播方法(比如 sendBroadcast(),sendOrderedBroadcast(),sendStickyBroadcast())發(fā)給broadcast receivers

18.Android用的數據庫是什么樣的扒怖?它和sql有什么區(qū)別?為什么要用ContentProvide业稼?它和sql的實現(xiàn)上有什么差別盗痒?

Adnroid用的是SQLite數據庫。它和其他網絡數據庫類似低散,也是通過SQL對數據進行管理俯邓。SQLite的操作非常簡單骡楼,包括數據類型在建表時也可以不指定。

使用ContentProvider 可以將數據共享給其他應用稽鞭,讓除本應用之外的應用也可以訪問本應用的數據鸟整。它的底層是用SQLite 數據庫實現(xiàn)的,所以其對數據做的各種操作都是以Sql實現(xiàn)朦蕴,只是在上層提供的是Uri篮条。

19.通過Intent傳遞一些二進制數據的方法有哪些?

1)使用Serializable接口實現(xiàn)序列化,這是Java常用的方法梦重。

2)實現(xiàn)Parcelable接口兑燥,這里Android的部分類比如Bitmap類就已經實現(xiàn)了,同時Parcelable在Android AIDL中交換數據也很常見的琴拧。

20.對一些資源以及狀態(tài)的操作保存降瞳,最好是保存在生命周期的哪個函數中進行?

onResume()恢復數據蚓胸、onPause()保存數據挣饥。

21.如何一次性退出所有打開的Activity

編寫一個Activity作為入口,當需要關閉程序時沛膳,可以利用Activity的SingleTop模式跳轉該Activity扔枫,它上面的所有Activity都會被銷毀掉。然后再將該Activity關閉锹安。

或者再跳轉時短荐,設置intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);這樣也能將上面的Activity銷毀掉。

22.說說Service的生命周期叹哭?

啟動Service的方式有兩種忍宋,各自的生命周期也有所不同。

一风罩、通過startService啟動Service:onCreate糠排、onStartCommand、onDestory超升。

二入宦、通過bindService綁定Service:onCreate、onBind室琢、onUnbind乾闰、onDestory。

23.什么是AIDL盈滴?AIDL是如何工作的汹忠?

AIDL(Android接口描述語言)是一種接口描述語言; 編譯器可以通過aidl文件生成一段代碼,通過預先定義的接口達到兩個進程內部通信進程的目的. 如果需要在一個Activity中, 訪問另一個Service中的某個對象, 需要先將對象轉化成AIDL可識別的參數(可能是多個參數), 然后使用AIDL來傳遞這些參數, 在消息的接收端, 使用這些參數組裝成自己需要的對象。AIDL是基于接口的宽菜,但它是輕量級的。它使用代理類在客戶端和實現(xiàn)層間傳遞值.竿报。

24.Android如何把文件存放在SDCard上铅乡?

在AndroidManifest.xml中加入訪問SDCard的權限如下:



要往SDCard存放文件,程序必須先判斷手機是否裝有SDCard烈菌,并且可以進行讀寫阵幸。

注意:訪問SDCard必須在AndroidManifest.xml中加入訪問SDCard的權限。

Environment.getExternalStorageState()方法用于獲取SDCard的狀態(tài)芽世,如果手機裝有SDCard挚赊,并且可以進行讀寫,那么方法返回的狀態(tài)等于Environment.MEDIA_MOUNTED济瓢。

Environment.getExternalStorageDirectory()方法用于獲取SDCard的目錄荠割。

25.注冊廣播有幾種方式,這些方式有何優(yōu)缺點旺矾?

兩種蔑鹦。一種是通過代碼注冊,這種方式注冊的廣播會跟隨程序的生命周期箕宙。二種是在AndroidManifest.xml中配置廣播嚎朽,這種常駐型廣播當應用程序關閉后,如果有信息廣播來柬帕,程序也會被系統(tǒng)調用自動運行哟忍。

26.什么是ANR 如何避免它?

在Android上,如果你的應用程序有一段時間響應不夠靈敏陷寝,系統(tǒng)會向用戶顯示一個對話框锅很,這個對話框稱作應用程序無響應(ANR:Application Not Responding)對話框。用戶可以選擇讓程序繼續(xù)運行盼铁,但是粗蔚,他們在使用你的應用程序時,并不希望每次都要處理這個對話框饶火。因此鹏控,在程序里對響應性能的設計很重要,這樣肤寝,系統(tǒng)不會顯示ANR給用戶当辐。要避免它,應該盡量少在主線程做耗時太長的操作鲤看,應該將這些操作放在線程當中去做缘揪。

27.Android本身的api并未聲明會拋出異常,則其在運行時有無可能拋出runtime異常,你遇到過嗎?諾有的話會導致什么問題?如何解決?

有可能找筝,比如空指針異常蹈垢、數組下表越界等異常,這些異常拋出后可能會導致程序FC袖裕。在編寫代碼時應該做好檢測曹抬,多考慮可能會發(fā)生錯誤的情況,從代碼層次解決這些問題急鳄。

28.為什么要用 ContentProvider?它和 sql 的實現(xiàn)上有什么差別?

使用ContentProvider 可以將數據共享給其他應用谤民,讓除本應用之外的應用也可以訪問本應用的數據。它的底層是用SQLite 數據庫實現(xiàn)的疾宏,所以其對數據做的各種操作都是以Sql實現(xiàn)张足,只是在上層提供的是Uri。

29.談談 UI 中, Padding 和 Margin 有什么區(qū)別?

padding指內邊距坎藐,表示組件內部元素距離組件邊框的距離为牍。

marin指外邊距,表示組件與組件之間的距離顺饮。

30.請介紹下 Android 的數據存儲方式吵聪。

Android 提供了5種方式存儲數據:

1)使用SharedPreferences存儲數據;

2)文件存儲數據兼雄;

3)SQLite數據庫存儲數據吟逝;

4)使用ContentProvider存儲數據;

5)網絡存儲數據赦肋;

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末块攒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子佃乘,更是在濱河造成了極大的恐慌囱井,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趣避,死亡現(xiàn)場離奇詭異庞呕,居然都是意外死亡,警方通過查閱死者的電腦和手機程帕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門住练,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人愁拭,你說我怎么就攤上這事讲逛。” “怎么了岭埠?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵盏混,是天一觀的道長蔚鸥。 經常有香客問我,道長许赃,這世上最難降的妖魔是什么止喷? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮图焰,結果婚禮上启盛,老公的妹妹穿的比我還像新娘。我一直安慰自己技羔,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布卧抗。 她就那樣靜靜地躺著藤滥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪社裆。 梳的紋絲不亂的頭發(fā)上拙绊,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音泳秀,去河邊找鬼标沪。 笑死,一個胖子當著我的面吹牛嗜傅,可吹牛的內容都是我干的金句。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吕嘀,長吁一口氣:“原來是場噩夢啊……” “哼违寞!你這毒婦竟也來了?” 一聲冷哼從身側響起偶房,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤趁曼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后棕洋,有當地人在樹林里發(fā)現(xiàn)了一具尸體挡闰,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年掰盘,在試婚紗的時候發(fā)現(xiàn)自己被綠了摄悯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡庆杜,死狀恐怖射众,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情晃财,我是刑警寧澤叨橱,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布典蜕,位于F島的核電站,受9級特大地震影響罗洗,放射性物質發(fā)生泄漏愉舔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一伙菜、第九天 我趴在偏房一處隱蔽的房頂上張望轩缤。 院中可真熱鬧,春花似錦贩绕、人聲如沸火的。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馏鹤。三九已至,卻和暖如春娇哆,著一層夾襖步出監(jiān)牢的瞬間湃累,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工碍讨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留治力,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓勃黍,卻偏偏與公主長得像宵统,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子溉躲,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,138評論 25 707
  • 所有知識點已整理成app app下載地址 J2EE 部分: 1.Switch能否用string做參數榜田? 在 Jav...
    侯蛋蛋_閱讀 2,434評論 1 4
  • 轉自 1. 什么是Activity? 四大組件之一,一般的,一個用戶交互界面對應一個activity setCon...
    joe1632閱讀 1,400評論 0 7
  • 許久沒來簡書了,今天來看到朋友一篇寫秋的文章锻梳,不經讓我想起之前一家人出門看到滿地的金黃箭券,拍了好多照片,準備寫一...
    楊小浠浠閱讀 367評論 0 2
  • 最近縈繞在我腦海里的總是本杰明巴頓奇事這部電影疑枯”缈椋或許是因為真實本身就很有力量啊,更何況目標對象是如此完整漫長的一生...
    方頭記閱讀 669評論 0 50