android基礎(chǔ)知識合集

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

2.XML包括哪些解釋技術(shù)劳景,區(qū)別是什么配紫?
DOM和SAXDOM將文檔解析成一顆文檔樹,可在節(jié)點上進行遍歷审孽、增加疲恢、修改和刪除。一次性讀入內(nèi)存瓷胧,對內(nèi)存消耗大。SAX至上而下解析文檔棚愤,以事件進行驅(qū)動搓萧。不會一次性讀入內(nèi)存,對內(nèi)存消耗小宛畦,不能任意讀取節(jié)點瘸洛,并且不能對節(jié)點進行增加、修改和刪除次和。

3.switch語句能否作用在byte上反肋,能否作用在long上,能否作用在String上?
switch能作用在byte踏施、char石蔗、short和int上,JDK1.7后可以作用在String上畅形。

4.”==”和equals方法究竟有什么區(qū)別养距?
==和equals都可以比較地址。==是運算符日熬,equals是方法棍厌,方法可以通過重寫改變其行為,如String的equals就是比較字符串內(nèi)容。

5.構(gòu)造方法能否被重寫和重載耘纱?
構(gòu)造方法不能被重寫但是能被重載敬肚。

6.面向?qū)ο蟮奶卣饔心男?br> 封裝、繼承束析、多態(tài)和抽象艳馒。

7.抽象類和接口的區(qū)別?
1).抽象類是abstract class修飾畸陡,接口是interface修飾鹰溜。2).抽象類可以有任意類型的屬性,接口只能有靜態(tài)常量修飾的屬性丁恭。3).抽象類可以有普通方法和抽象法方法曹动,接口的方法都是抽象方法。4).抽象類和接口都不能實例化牲览,但是抽象類有構(gòu)造方法墓陈,接口沒有構(gòu)造方法。5).抽象類只能單根繼承第献,接口可以多重實現(xiàn)贡必。

8.內(nèi)部類可以引用它的包含類的成員嗎?有沒有什么限制庸毫?
可以引用仔拟。如果需要指定當(dāng)前類時要用外部類.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是基本數(shù)據(jù)類型肋联。包裝類擁有方法和屬性威蕉,基本數(shù)據(jù)類型不具備。包裝類可以通過intValue來轉(zhuǎn)換成基本數(shù)據(jù)類型橄仍,也可以通過new Integer()將基本數(shù)據(jù)類型轉(zhuǎn)換為包裝類韧涨。在JDK1.5后牍戚,包裝類和基本數(shù)據(jù)類型可以實現(xiàn)自動轉(zhuǎn)換。

12.sleep()和wait()有什么區(qū)別?
sleep是Thread類的方法虑粥,wait是Object類的方法如孝。sleep是自動喚醒,wait需要其他線程來喚醒娩贷。sleep不會釋放同步鎖第晰,wait會釋放同步鎖。sleep可以用在任意方法中彬祖,wait只能用在同步方法或同步塊中茁瘦。Sleep()不會釋放對象鎖到時自動恢復(fù), wait()會釋放對象鎖 進入等待此對象的等待鎖定池 發(fā)出notify()方法后 才進入等待鎖定池準(zhǔn)備對象鎖的獲 取進入運行狀態(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é)流用于讀取或?qū)懗龆M制數(shù)據(jù)姊舵,比如圖片晰绎、影像等數(shù)據(jù)。字符流用于讀取或?qū)懗鲎址麛?shù)據(jù)括丁,比如傳輸字符串荞下。所有的數(shù)據(jù)都可以通過字節(jié)流來進行處理,不過如果是字符數(shù)據(jù)史飞,用字節(jié)流還需要進行轉(zhuǎn)換后傳輸尖昏,如果使用字符流可以方便數(shù)據(jù)的轉(zhuǎn)換。

17.error和exception有什么區(qū)別?
error是系統(tǒng)錯誤构资,代碼不能處理的錯誤抽诉,比如內(nèi)存溢出、堆棧溢出等蚯窥。exception是程序異常掸鹅,可以通過代碼try-catch進行處理,比如空指針異常拦赠,數(shù)組越界等巍沙。

18.談?wù)刦inal,finally,finalize的區(qū)別?
final是修飾符荷鼠,可以修飾類(不能被繼承)句携、屬性(常量)、和方法(不能被重寫)允乐。finally是異常處理塊中的代碼塊矮嫉,表示無論如何都會執(zhí)行的代碼塊。finalize是Object類的方法牍疏,該方法在對象被垃圾回收之前執(zhí)行的方法蠢笋。

19.當(dāng)一個線程進入一個對象的一個synchronized方法后突雪,其它線程是否可進入此對象的其它方法?
如果其他方法沒有加synchronized的話是可以進入的济瓢。

20.當(dāng)一個對象被當(dāng)作參數(shù)傳遞到一個方法后,此方法可改變這個對象的屬性括袒,并可返回變化后的結(jié)果厦滤,那么這里到底是值傳遞還是引用傳遞?
java中只有值傳遞援岩,如果傳遞的對象,實際也是傳遞該對象的地址掏导。

21.作用域public,private,protected,以及不寫時的區(qū)別
public公共修飾符享怀,表示任意類都可以訪問。protected為受保護的修飾符趟咆,表示同類添瓷、同包以及不同包但是父子關(guān)系的是可以訪問梅屉。不寫表示默認(rèn)修飾符,或者稱為package修飾符仰坦,該修飾符表示只有同類或同包下的類可以訪問履植,出了這個包就不能訪問了。private為私有修飾符悄晃,表示只有同類中可以訪問玫霎,出了這個類就不能訪問了。

22.用最有效率的方法算出2乘以8等於幾 2《 3
將2的二進制向左移3位妈橄。java中用<<來移位庶近。

23.heap和stack有什么區(qū)別。
heap表示堆眷蚓,stack表示棧鼻种。堆中放對象,棧中放引用變量沙热。堆空間是一個無序的空間叉钥,棧是先進后出的結(jié)構(gòu)。

24.運行時異常與一般異常有何異
運行時異常是指繼承于RuntimeException的異常篙贸,這些異常在編譯時可以不進行處理投队,當(dāng)運行時如果出現(xiàn)問題才會拋出。如NullPointException爵川、 ArrayIndexOutOfBoundsException一般異常也稱為編譯時異常敷鸦,這些異常是繼承Exception但又不屬于RuntimeException的子類,如果程序中出現(xiàn)這些異常寝贡,在編譯時必須進行捕獲或拋出扒披,否 則編譯無法通過。如IOException圃泡、FileNotFoundException

25.垃圾回收的優(yōu)點和原理碟案。并考慮2種回收機制
Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程序員最頭疼的內(nèi)存管理的問題迎刃而解颇蜡,它使得Java程序員在編寫程序的時候不再需要考慮內(nèi)存 管理蟆淀。由于有個垃圾回收機制,Java中的對象不再有”作用域”的概念澡匪,只有對象的引用才有”作用域”。垃圾回收可以有效的防止內(nèi)存泄露褒链,有效的使用可以使用 的內(nèi)存唁情。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預(yù)知的情況下對內(nèi)存堆中已經(jīng)死亡的或者長時間沒有使用的對象進行清楚和回收甫匹,程序員不能 實時的調(diào)用垃圾回收器對某個對象或所有對象進行垃圾回收甸鸟〉敕眩回收機制有分代復(fù)制垃圾回收和標(biāo)記垃圾回收,增量垃圾回收抢韭。

26.描述一下JVM加載class文件的原理機制?
JVM中類的裝載是由ClassLoader和它的子類來實現(xiàn)的,Java ClassLoader 是一個重要的Java運行時系統(tǒng)組件薪贫。它負責(zé)在運行時查找和裝入類文件的類。

27.是否可以從一個static方法內(nèi)部發(fā)出對非static方法的調(diào)用刻恭?
不能瞧省,除非先創(chuàng)建非static方法所在類的對象。

28.什么是java序列化鳍贾,如何實現(xiàn)java序列化鞍匾?
序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內(nèi)容進行流化骑科∠鹗纾可以對流化后的對象進行讀寫操作,也可將流化后的對象傳輸于網(wǎng)絡(luò)之間咆爽。序 列化是為了解決在對對象流進行讀寫操作時所引發(fā)的問題梁棠。序列化的實現(xiàn):將需要被序列化的類實現(xiàn)Serializable接口,該接口沒有需要實現(xiàn)的方法斗埂,implements Serializable只是為了標(biāo)注該對象是可被序列化 的符糊,然后使用一個輸出流(如:FileOutputStream)來構(gòu)造一個ObjectOutputStream(對象流)對象,接著蜜笤,使用ObjectOutputStream對象的 writeObject(Object obj)方法就可以將參數(shù)為obj的對象寫出(即保存其狀態(tài))濒蒋,要恢復(fù)的話則用輸入流。

29.Anonymous Inner Class(匿名內(nèi)部類)是否可以extends(繼承)其它類把兔,是否可以implements(實現(xiàn))interface(接口)沪伙?
匿名內(nèi)部類可以繼承類或?qū)崿F(xiàn)接口,但不是顯示的使用extends或implements來繼承或?qū)崿F(xiàn)县好。

30.ArrayList和Vector的區(qū)別,HashMap和Hashtable的區(qū)別围橡?
ArrayList是JDK1.2的集合類并且線程不安全,Vector是1.0的集合類并且線程安全缕贡,二者用法類似翁授。HashMap線程不安全且能放空鍵或空值,Hashtable線程安全且不能放空鍵或空值晾咪。

31.String 和StringBuffer有什么差別收擦?在什么情況下使用它們?
String字符串的基本類谍倦,該字符串是不可變的塞赂。StringBuffer是利用堆來存儲字符串,并且可以對字符串的內(nèi)容進行改變昼蛀。

32.new一個類對象和使用類名創(chuàng)建一個對象有什么區(qū)別宴猾?二者使用時應(yīng)該注意什么圆存?
new對象是最常見的創(chuàng)建對象的方式,利用類模板是通過反射來創(chuàng)建對象仇哆。雖然new對象時在底層也會通過類模板來創(chuàng)建對象沦辙,但是new對象的效率要比直接通過類 模板創(chuàng)建對象的方式要高。但是使用類模板的方式可以讓程序的靈活性提高讹剔。

33.LinkedList和ArrayList的區(qū)別油讯?
1)LinkedList是鏈表結(jié)構(gòu)的集合,ArrayList數(shù)組結(jié)構(gòu)的集合辟拷。2)LinkedList在中間或前面增加或刪除數(shù)據(jù)時效率比ArrayList高撞羽。3)LinkedList在最后添加或刪除數(shù)據(jù)時效率比ArrayList低。4)遍歷數(shù)據(jù)時ArrayList效率高于LinkedList衫冻。

34.介紹JAVA開發(fā)中常用的Collection FrameWork(集合框架)?
Java中集合框架分為Collection和Map接口诀紊,Collection接口下的集合每個元素都由一個值組成,Map接口下的集合類每個元素都是由鍵值對組成隅俘。Collection接口下面有List和Set接口邻奠,List接口下常見的類有ArrayList、LinkedList为居、Vector碌宴。它們中的元素可以重復(fù),并且是有序的蒙畴。Set接口下常 見的類有HashSet贰镣、TreeSet。它們中的元素不能重復(fù)膳凝,并且是無序的碑隆。

35.在異常當(dāng)中 throw和throws 有什么區(qū)別和聯(lián)系?
throw是在代碼中拋出一個異常蹬音,后面跟的是異常對象上煤,虛擬機運行到這里時會立即引發(fā)一個異常。throws是寫在方法聲明上的著淆,表示聲明該方法可能會拋出異常劫狠,后面跟的是異常類型。調(diào)用該方法的時候可以選擇處理它或繼續(xù)往外拋永部。

36.重載和重寫的區(qū)別
重載是指在一個類中独泞,兩個或兩個以上的方法具有相同方法名和不同參數(shù)列表,則表示這些方法為重載方法苔埋。重寫是指在父類和子類中懦砂,子類的方法和父類的方法具有相同方法名、相同參數(shù)列表、相同返回類型孕惜、子類的訪問修飾符范圍不小于父類的訪問修飾符范圍,異常 的類型和個數(shù)不大于或多于父類的異常類型和個數(shù)晨炕,則表示該方法為重寫方法衫画。換句話說重載方法是區(qū)分同一個類中相同方法名的方法,重寫方法是找到父類相同 方法名的方法并重新改變方法的行為瓮栗。

37.Java中try catch finally的執(zhí)行順序
先執(zhí)行try中代碼發(fā)生異常執(zhí)行catch中代碼削罩,最后一定會執(zhí)行finally中代碼

38.內(nèi)存泄露的原因:
資源對象沒關(guān)閉。如Cursor费奸、File等資源弥激。他們會在finalize中關(guān)閉,但這樣效率太低愿阐。容易造成內(nèi)存泄露微服。SQLiteCursor,當(dāng)數(shù)據(jù)量大的時候容易泄露
使用Adapter時缨历,沒有使用系統(tǒng)緩存的converView以蕴。
即時調(diào)用recycle()釋放不再使用的Bitmap。適當(dāng)降低Bitmap的采樣率辛孵,如:BitmapFactory.Options options = newBitmapFactory.Options();options.inSampleSize = 2;//圖片寬高都為原來的二分之一丛肮,即圖片為原來的四分之一Bitmap bitmap =BitmapFactory.decodeStream(cr.openInputStream(uri), null, options); preview.setImageBitmap(bitmap);
使用application的context來替代activity相關(guān)的context。盡量避免activity的context在自己的范圍外被使用魄缚,這樣會導(dǎo)致activity無法釋放宝与。
注冊沒取消造成內(nèi)存泄露如:廣播集合中的對象沒清理造成的內(nèi)存泄露我們通常把一些對象的引用加入到了集合中,當(dāng)我們不需要該對象時冶匹,并沒有把它的引用從集合中清理掉习劫,這樣這個集合就會 越來越大。如果這個集合是static的話徙硅,那情況就更嚴(yán)重了榜聂。
Handler應(yīng)該申明為靜態(tài)對象, 并在其內(nèi)部類中保存一個對外部類的弱引用嗓蘑。如下:static class MyHandler extends Handler{WeakReference<Activity > mActivityReference; MyHandler(Activity activity){ mActivityReference= new WeakReference<Activity>(activity);}

@Overridepublic void handleMessage(Message msg){final Activity activity = mActivityReference.get(); if (activity != null){ mImageView.setImageBitmap(mBitmap);}

}}

39.Iterator和Enumeration的不同
函數(shù)接口不同Enumeration只有2個函數(shù)接口须肆。通過Enumeration,我們只能讀取集合的數(shù)據(jù)桩皿,而不能對數(shù)據(jù)進行修改豌汇。 Iterator只有3個函數(shù)接口。Iterator除了能讀 取集合的數(shù)據(jù)之外泄隔,也能數(shù)據(jù)進行刪除操作拒贱。
Iterator支持fail-fast機制,而Enumeration不支持。 Enumeration 是JDK 1.0添加的接口逻澳。使用到它的函數(shù)包括Vector闸天、Hashtable等類,這些類 都是JDK 1.0中加入的斜做,Enumeration存在的目的就是為它們提供遍歷接口苞氮。Enumeration本身并沒有支持同步,而在Vector瓤逼、Hashtable實現(xiàn) Enumeration時笼吟,添加了同步。而Iterator 是JDK 1.2才添加的接口霸旗,它也是為了HashMap贷帮、ArrayList等集合提供遍歷接口。Iterator是支持fail-fast 機制的:當(dāng)多個線程對同一個集合的內(nèi)容進行操作時诱告,就可能會產(chǎn)生fail-fast事件撵枢。ail-fast 機制是java集合(Collection)中的一種錯誤機制。當(dāng)多個線程對同一個集合的內(nèi)容進行操作時蔬啡,就可能會產(chǎn)生fail-fast事件诲侮。例如:當(dāng)某一個線 程A通過iterator去遍歷某集合的過程中,若該集合的內(nèi)容被其他線程所改變了箱蟆;那么線程A訪問集合時沟绪,就會拋出ConcurrentModificationException異 常,產(chǎn)生fail-fast事件空猜。

40.接口的注意點
接口中的字段全部默認(rèn)為 public static類型绽慈。
接口中的方法全部默認(rèn)為 public類型。
接口中可以申明內(nèi)部類辈毯,而默認(rèn)為public static坝疼,正因為是static,只是命名空間屬于接口谆沃,代碼邏輯不屬于接口钝凶。所以不違法接口定義。
接口本身可以申明為public或者缺省唁影。
抽象類繼承自某接口耕陷。如果在抽象類中實現(xiàn)了父類(接口)中的方法,在其子類可以不用實現(xiàn)据沈,否則在子類必須實現(xiàn)哟沫。

41.final方法
將方法聲明為final那有兩個原因,第一就是說明你已經(jīng)知道這個方法提供的功能已經(jīng)滿足你要求锌介,不需要進行擴展嗜诀,并且也不允許任何從此類繼承的類來覆寫這個方法猾警,但是繼承仍然可以繼承這個方法,也就是說可以直接使用隆敢。第二就是允許編譯器將所有對此方法的調(diào)用轉(zhuǎn)化為inline調(diào)用的機制发皿,它會使你在調(diào)用final方法時,直接將方法主體插入到調(diào)用處拂蝎,而不是進行例行的方法調(diào)用雳窟,例如保存斷點,壓棧等匣屡,這樣可能會使你的程序效率有所提高,然而當(dāng)你的方法主體非常龐大時拇涤,或你在多處調(diào)用此方法捣作,那么你的調(diào)用主體代碼便會迅速膨脹,可能反而會影響效率鹅士,所以你要慎用final進行方法定義券躁。

ANDROID部分

1.Android 開發(fā)的四大組件:
活動(activity),用于表現(xiàn)功能掉盅;服務(wù)(service)也拜,后臺運行服務(wù),不提供界面呈現(xiàn)趾痘;廣播接受者(Broadcast Receive)慢哈,勇于接收廣播;內(nèi)容提供者(Content Provider)永票,支持多個應(yīng)用中存儲和讀取數(shù)據(jù)卵贱,相當(dāng)于數(shù)據(jù)庫。
1).活動
Android中侣集,activity是所有程序的根本键俱,所有程序的流程都運行在activity之中,activity可以算是開發(fā)者遇到的最頻繁世分,也是android當(dāng)中最基本的模塊之一编振。在android的程序中,activity一般代表手機屏幕的一屏臭埋。如果把手機比作一個瀏覽器踪央,那么activity就相當(dāng)于一個網(wǎng)頁。在activity當(dāng)中可以添加一些Button斋泄、Checkbox等控件杯瞻,可以看到activity概念和網(wǎng)頁的概念相當(dāng)類似。
一般一個android應(yīng)用是由多個activity組成的炫掐,這多個activity之間可以進行相互跳轉(zhuǎn)魁莉。例如,按下一個Button按鈕后,可能會跳轉(zhuǎn)到其他的activity旗唁,與網(wǎng)頁跳轉(zhuǎn)稍微有點不一樣的是畦浓,activity之間的跳轉(zhuǎn)有可能返回值。例如检疫,從activity A跳轉(zhuǎn)到activity B讶请,那么當(dāng)activity B運行結(jié)束時,有可能會給activity A一個返回值屎媳。這樣做在很多時候是相當(dāng)方便的夺溢。
當(dāng)打開一個新的屏幕時,之前一個屏幕會被置為暫停狀態(tài)烛谊,并且壓入歷史堆棧中风响。用戶可以通過回退操作返回到以前打開過的屏幕〉べ鳎可以選擇性的一處一些沒有必要保留的屏幕状勤,因為Android會把每個應(yīng)用的開始到當(dāng)前的每個屏幕保存在堆棧中。
2).服務(wù)
Service是android系統(tǒng)中的一種組件双泪,跟activity的級別差不多持搜,但是他不能自己運行,只能后臺運行焙矛,并且可以和其他組件進行交互葫盼。Service是沒有界面長生命周期的代碼。Service是一種程序村斟,可以運行很長時間的剪返,但是卻沒有用戶界面。這么說有點枯燥邓梅,來看個例子脱盲。打開一個音樂播放器的程序,這時如果想上網(wǎng)日缨,那么打開Android瀏覽器钱反,這時雖然已經(jīng)進入瀏覽器這個程序,但是歌曲播放并沒有停止匣距,而是在后臺繼續(xù)一首接一首的播放面哥,其實這個播放就是由播放音樂的Service進行控制。當(dāng)然這個播放音樂的Service也可以停止毅待。例如尚卫,當(dāng)播放列表里的歌曲都結(jié)束,或用戶按下了停止音樂播放的快捷鍵等尸红。Service可以在很多場合的應(yīng)用中使用吱涉,如播放多媒體時用戶啟動了其他Activity刹泄,這時程序要在后臺繼續(xù)播放,比如檢測SD卡上文件的變化怎爵,或在后臺記錄地理信息位置的改變等特石,而服務(wù)卻藏在后臺。
開啟Service有兩種方式:
(1)Context.starService():Service會經(jīng)歷onCreat ——>onStar(如果Service還沒有運行鳖链,則Android先調(diào)用onCreat()姆蘸,然后調(diào)用onStar(),所以一個Service的onStar方能會重復(fù)調(diào)用多次)芙委;如果是調(diào)用者自己直接退出而沒有調(diào)用StopService逞敷,服務(wù)會一直在后臺運行。該服務(wù)的調(diào)用者再啟動起來后可以通過stopService關(guān)閉服務(wù)灌侣。注意兰粉,多次調(diào)用Context.starService()不會被嵌套(即使會有相應(yīng)的onStar()方法被調(diào)用),所以無論同一個服務(wù)被啟動多少次顶瞳,一旦調(diào)用Context.stopService()或者StopSelf(),都會被停止愕秫。
說明:傳遞給starService()的Intent對象會傳遞給onStar()方法慨菱。調(diào)用順序為onCreat——onStar(可調(diào)用多次)——onDestroy.
(2)Context.bindService():服務(wù)會經(jīng)歷onCreate()——onBind(),onBind將返回給客戶端一個IBind接口實例戴甩,IBind允許客戶端回調(diào)服務(wù)的方法符喝,比如得到服務(wù)運行的狀態(tài)或其他操作。這個時候把調(diào)用者(Context甜孤,如Activity)會和服務(wù)綁定在一起协饲,Context退出了,服務(wù)就會調(diào)用onUnbind——onDestroy相應(yīng)退出缴川,所謂綁定在一起就是“共存亡”了茉稠。
3).廣播接收器
在Android中,廣播是一種廣泛運用的在應(yīng)用程序之間傳輸信息的機制把夸。而廣播接收器是對發(fā)送出來的廣播進行過濾接受并響應(yīng)的一類組件而线。可以使用廣播接收器來讓應(yīng)用對一個外部時間做出響應(yīng)恋日。例如膀篮,當(dāng)電話呼入這個外部事件到來時,可以利用廣播接收器進行處理岂膳。當(dāng)下載一個程序成功完成時誓竿,仍然可以利用廣播接收器進行處理。廣播接收器不NotificationManager來通知用戶這些事情發(fā)生了谈截。廣播接收器既可以在AndroidManifest.xml中注冊筷屡,也可以在運行時的代碼中使用Context.registerReceive()進行注冊涧偷。只要是注冊了,當(dāng)事件來臨時速蕊,即使程序沒有啟動嫂丙,系統(tǒng)也在需要的時候啟動程序。各種應(yīng)用還可以通過使用Context.sendBroadcast()將它們自己的Intent廣播給其他應(yīng)用程序规哲。
4).內(nèi)容提供者
內(nèi)容提供者(Content Provider)是Android提供的第三方應(yīng)用數(shù)據(jù)的訪問方案跟啤。
在Android中,對數(shù)據(jù)的保護是很嚴(yán)密的唉锌,除了放在SD卡中的數(shù)據(jù)隅肥,一個應(yīng)用所持有的數(shù)據(jù)庫、文件等內(nèi)容袄简,都是不允許其他直接訪問的腥放。Android當(dāng)然不會真的把每一個應(yīng)用都做成一座“孤島”,它為所有應(yīng)用都準(zhǔn)備可一扇窗绿语,這就是Content Provider秃症。應(yīng)用想對外提供的數(shù)據(jù),可以通過派生Content Provider類吕粹,封裝成一枚Content Provider种柑。每個Content Provider都用一個uri作為獨立的標(biāo)識,形如:content://com.xxxxx匹耕。所有應(yīng)用看著像REST的樣子聚请,但實際上它比REST更為靈活。和REST類似稳其,uri也可以有兩種類型驶赏,一種是帶id的;另一種是列表的既鞠,但實現(xiàn)者不需要按照這個模式來做煤傍,給id的uri也可以返回列表類型的數(shù)據(jù)。

2.描述一個完整的Android activity lifecycle
activity的生命周期方法有:onCreate()嘱蛋、onStart()患久、onReStart()、onResume()浑槽、onPause()蒋失、onStop()、onDestory()桐玻;

3.顯式intent和隱式intent的區(qū)別是什么(android)
Intent定義:Intent是一種在不同組件之間傳遞的請求消息篙挽,是應(yīng)用程序發(fā)出的請求和意圖。作為一個完整的消息傳遞機制镊靴,Intent不僅需要發(fā)送端铣卡,還需要接收端链韭。顯式Intent定義:對于明確指出了目標(biāo)組件名稱的Intent,我們稱之為顯式Intent煮落。隱式Intent定義:對于沒有明確指出目標(biāo)組件名稱的Intent敞峭,則稱之為隱式Intent。說明:Android系統(tǒng)使用IntentFilter 來尋找與隱式Intent相關(guān)的對象蝉仇。

4.Android中線程同步的方法
線程同步的方法可以采用同步方法和同步塊旋讹。

5.怎么將一個Activity封裝成對話框的樣子? 怎樣將Activity封裝成長按Menu菜單的樣子?
簡單你只需要設(shè)置 一下Activity的主題就可以了在AndroidManifest.xml 中定義 Activity的地方一句話:Xml代碼android :theme=”@android:style/Theme.Dialog”android:theme=”@android:style/Theme.Dialog”這就使你的應(yīng)用程序變成對話框的形式彈出來了轿衔,或者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)的體系結(jié)構(gòu)
應(yīng)用層:android的應(yīng)用程序通常涉及用戶界面和交互宛官。應(yīng)用框架層:UI組件葫松、各種管理器等。函數(shù)庫層:系統(tǒng)C庫底洗、媒體庫腋么、webkit、SQLite等枷恕。linux核心庫:linux系統(tǒng)運行的組件。

7.描述下橫豎屏切換時候 activity 的生命周期
不設(shè)置Activity的android:configChanges時,切屏?xí)匦抡{(diào)用各個生命周期,切橫屏?xí)r會執(zhí)行一次,切豎屏?xí)r會執(zhí)行兩次.設(shè)置Activity的android:configChanges=”orientation”時,切屏還是會重新調(diào)用各個生命周期,切橫谭胚、豎屏?xí)r只會執(zhí)行一次.設(shè)置Activity的android:configChanges=”orientation|keyboardHidden”時,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行onConfigurationChanged方法.

8.android 中的動畫有哪幾種徐块,它們的特點和區(qū)別是什么 ?
兩種,一種是補間動畫(Tween)動畫灾而、還有一種是幀動畫(Frame)動畫胡控。Tween動畫,這種實現(xiàn)方式可以使視圖組件移動旁趟、放大昼激、縮小以及產(chǎn)生透明度的變化;另一種Frame動畫,傳統(tǒng)的動畫方法锡搜,通過順序的播放排列好的圖片來實現(xiàn)橙困,類似電影。

9.一條最長的短信息約占多少 byte?
140byte耕餐,70個漢字凡傅。

10.描述handler 機制的原理
andriod提供了 Handler 和 Looper 來滿足線程間的通信。Handler 先進先出原則肠缔。Looper類用來管理特定線程內(nèi)對象之間的消息交換(Message Exchange)夏跷。1)Looper: 一個線程可以產(chǎn)生一個Looper對象哼转,由它來管理此線程里的Message Queue(消息隊列)。2)Handler: 你可以構(gòu)造Handler對象來與Looper溝通槽华,以便push新消息到Message Queue里;或者接收Looper從Message Queue取出)所送來的消息壹蔓。3) Message Queue(消息隊列):用來存放線程放入的消息。4)線程:UI thread 通常就是main thread猫态,而Android啟動程序時會替它建立一個Message Queue佣蓉。

11.如何將 SQLite 數(shù)據(jù)庫 (dictionary.db 文件 ) 與 apk 文件一起發(fā)布 ?
可以將dictionary.db文件復(fù)制到Eclipse Android工程中的res\raw目錄中。所有在res\raw目錄中的文件不會被壓縮懂鸵,這樣可以直接提取該目錄中的文件偏螺。使用openDatabase方法來打開數(shù)據(jù)庫文件,如果該文件不存在匆光,系統(tǒng)會自動創(chuàng)建/sdcard/dictionary目錄套像,并將res\raw目錄中的 dictionary.db文件復(fù)制到/sdcard/dictionary目錄中

12.說說 android 中 mvc 的具體體現(xiàn)
mvc是model,view,controller的縮寫,mvc包含三個部分:模型(model)對象:是應(yīng)用程序的主體部分终息,所有的業(yè)務(wù)邏輯都應(yīng)該寫在該層夺巩。視圖(view)對象:是應(yīng)用程序中負責(zé)生成用戶界面的部分。也是在整個mvc架構(gòu)中用戶唯一可以看到的一層周崭,接收用戶的輸入柳譬,顯示處理結(jié)果⌒颍控制器(control)對象:是根據(jù)用戶的輸入美澳,控制用戶界面數(shù)據(jù)顯示及更新model對象狀態(tài)的部分,控制器更重要的一種導(dǎo)航功能摸航,響應(yīng)用戶出發(fā)的相關(guān)事件制跟,交給m層處理。android鼓勵弱耦合和組件的重用酱虎,在android中mvc的具體體現(xiàn)如下:1)視圖(view):一般采用xml文件進行界面的描述雨膨,使用的時候可以非常方便的引入。2)控制層(controller):android的控制層的重任通常落在了眾多的acitvity的肩上读串,這句話也就暗含了不要在acitivity中寫過多的代碼聊记,要通過activity交割model業(yè)務(wù)邏輯層處理,這樣做的另外一個原因是android中的acitivity的響應(yīng)時間是5s恢暖,如果耗時的操作放在這里排监,程序就很容易被回收掉。3)模型層(model):對數(shù)據(jù)庫的操作杰捂、對網(wǎng)絡(luò)等的操作都應(yīng)該在model里面處理社露,當(dāng)然對業(yè)務(wù)計算等操作也是必須放在的該層的。

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方法中要考慮方法傳進來的參數(shù)contentView是否為null情臭,如果為null就創(chuàng)建contentView并返回省撑,如果不為null則直接使用。在這個方法中盡可能少創(chuàng)建view俯在。2竟秫、給contentView設(shè)置tag(setTag()),傳入一個viewHolder對象跷乐,用于緩存要顯示的數(shù)據(jù)肥败,可以達到圖像數(shù)據(jù)異步加載的效果。3愕提、如果listview需要顯示的item很多馒稍,就要考慮分頁加載。比如一共要顯示100條或者更多的時候浅侨,我們可以考慮先加載20條纽谒,等用戶拉到列表底部的時候再去加載接下來的20條。

16.描述4 種 activity 的啟動模式
1)standard :系統(tǒng)的默認(rèn)模式如输,一次跳轉(zhuǎn)即會生成一個新的實例鼓黔。假設(shè)有一個activity命名為MainActivity,執(zhí)行語句:startActivity(new Intent(MainActivity.this, MainActivity.class))后不见,MainActivity將跳轉(zhuǎn)到另外一個MainActivity澳化,也就是現(xiàn)在的Task棧里面有MainActivity的兩個實例。按返回鍵后你會發(fā)現(xiàn)仍然是在MainActivity(第一個)里面脖祈。2)singleTop:singleTop 跟standard 模式比較類似肆捕。如果已經(jīng)有一個實例位于Activity棧的頂部時刷晋,就不產(chǎn)生新的實例盖高,而只是調(diào)用Activity中的newInstance()方法。如果不位于棧頂眼虱,會產(chǎn)生一個新的實例喻奥。例:當(dāng)MainActivity為 singleTop 模式時,執(zhí)行跳轉(zhuǎn)后棧里面依舊只有一個實例捏悬,如果現(xiàn)在按返回鍵程序?qū)⒅苯油顺觥?)singleTask: singleTask模式和后面的singleInstance模式都是只創(chuàng)建一個實例的撞蚕。在這種模式下,無論跳轉(zhuǎn)的對象是不是位于棧頂?shù)腶ctivity过牙,程序都不會生成一個新的實例(當(dāng)然前提是棧里面已經(jīng)有這個實例)甥厦。這種模式相當(dāng)有用纺铭,在以后的多activity開發(fā)中,經(jīng)常會因為跳轉(zhuǎn)的關(guān)系導(dǎo)致同個頁面生成多個實例刀疙,這個在用戶體驗上始終有點不好舶赔,而如果你將對應(yīng)的activity聲明為 singleTask 模式,這種問題將不復(fù)存在谦秧。4)singleInstance: 設(shè)置為 singleInstance 模式的 activity 將獨占一個task(感覺task可以理解為進程)竟纳,獨占一個task的activity與其說是activity,倒不如說是一個應(yīng)用疚鲤,這個應(yīng)用與其他activity是獨立的锥累,它有自己的上下文activity。

17.什么是Intent集歇,如何使用桶略?
Android基本的設(shè)計理念是鼓勵減少組件間的耦合,因此Android提供了Intent (意圖) 鬼悠,Intent提供了一種通用的消息系統(tǒng)删性,它允許在你的應(yīng)用程序與其它的應(yīng)用程序間傳遞Intent來執(zhí)行動作和產(chǎn)生事件。使用Intent可以激活A(yù)ndroid應(yīng)用的三個核心組件:活動焕窝、服務(wù)和廣播接收器蹬挺。通過startActivity() orstartActivityForResult()啟動一個Activity;過 startService() 啟動一個服務(wù)它掂,或者通過bindService() 和后臺服務(wù)交互巴帮;通過廣播方法(比如 sendBroadcast(),sendOrderedBroadcast(),sendStickyBroadcast())發(fā)給broadcast receivers

18.Android用的數(shù)據(jù)庫是什么樣的?它和sql有什么區(qū)別虐秋?為什么要用ContentProvide榕茧?它和sql的實現(xiàn)上有什么差別?
Adnroid用的是SQLite數(shù)據(jù)庫客给。它和其他網(wǎng)絡(luò)數(shù)據(jù)庫類似用押,也是通過SQL對數(shù)據(jù)進行管理。SQLite的操作非常簡單靶剑,包括數(shù)據(jù)類型在建表時也可以不指定蜻拨。使用ContentProvider 可以將數(shù)據(jù)共享給其他應(yīng)用,讓除本應(yīng)用之外的應(yīng)用也可以訪問本應(yīng)用的數(shù)據(jù)桩引。它的底層是用SQLite 數(shù)據(jù)庫實現(xiàn)的缎讼,所以其對數(shù)據(jù)做的各種操作都是以Sql實現(xiàn),只是在上層提供的是Uri坑匠。

19.通過Intent傳遞一些二進制數(shù)據(jù)的方法有哪些?
1)使用Serializable接口實現(xiàn)序列化血崭,這是Java常用的方法。2)實現(xiàn)Parcelable接口,這里Android的部分類比如Bitmap類就已經(jīng)實現(xiàn)了夹纫,同時Parcelable在Android AIDL中交換數(shù)據(jù)也很常見的咽瓷。

20.對一些資源以及狀態(tài)的操作保存,最好是保存在生命周期的哪個函數(shù)中進行舰讹?
onResume()恢復(fù)數(shù)據(jù)忱详、onPause()保存數(shù)據(jù)。

21.如何一次性退出所有打開的Activity
編寫一個Activity作為入口跺涤,當(dāng)需要關(guān)閉程序時贩挣,可以利用Activity的SingleTop模式跳轉(zhuǎn)該Activity掰曾,它上面的所有Activity都會被銷毀掉。然后再將該Activity關(guān)閉〔埔欤或者再跳轉(zhuǎn)時誊稚,設(shè)置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文件生成一段代碼鸟废,通過預(yù)先定義的接口達到兩個進程內(nèi)部通信進程的目的. 如果需要在一個Activity中, 訪問另一個Service中的某個對象, 需要先將對象轉(zhuǎn)化成AIDL可識別的參數(shù)(可能是多個參數(shù)), 然后使用AIDL來傳遞這些參數(shù), 在消息的接收端, 使用這些參數(shù)組裝成自己需要的對象猜敢。AIDL是基于接口的,但它是輕量級的盒延。它使用代理類在客戶端和實現(xiàn)層間傳遞值.缩擂。

24.Android如何把文件存放在SDCard上?
在AndroidManifest.xml中加入訪問SDCard的權(quán)限如下:<!– 在SDCard中創(chuàng)建與刪除文件權(quán)限 –>
<!– 往SDCard寫入數(shù)據(jù)權(quán)限 –>

要往SDCard存放文件兰英,程序必須先判斷手機是否裝有SDCard撇叁,并且可以進行讀寫供鸠。注意:訪問SDCard必須在AndroidManifest.xml中加入訪問SDCard的權(quán)限畦贸。Environment.getExternalStorageState()方法用于獲取SDCard的狀態(tài),如果手機裝有SDCard,并且可以進行讀寫薄坏,那么方法返回的狀態(tài)等于Environment.MEDIA_MOUNTED趋厉。Environment.getExternalStorageDirectory()方法用于獲取SDCard的目錄。

25.注冊廣播有幾種方式胶坠,這些方式有何優(yōu)缺點君账?
兩種。一種是通過代碼注冊沈善,這種方式注冊的廣播會跟隨程序的生命周期乡数。二種是在AndroidManifest.xml中配置廣播,這種常駐型廣播當(dāng)應(yīng)用程序關(guān)閉后闻牡,如果有信息廣播來净赴,程序也會被系統(tǒng)調(diào)用自動運行。

26.什么是ANR 如何避免它?
在Android上罩润,如果你的應(yīng)用程序有一段時間響應(yīng)不夠靈敏玖翅,系統(tǒng)會向用戶顯示一個對話框,這個對話框稱作應(yīng)用程序無響應(yīng)(ANR:Application Not Responding)對話框割以。用戶可以選擇讓程序繼續(xù)運行金度,但是,他們在使用你的應(yīng)用程序時严沥,并不希望每次都要處理這個對話框猜极。因此,在程序里對響應(yīng)性能的設(shè)計很重要消玄,這樣魔吐,系統(tǒng)不會顯示ANR給用戶。要避免它莱找,應(yīng)該盡量少在主線程做耗時太長的操作酬姆,應(yīng)該將這些操作放在線程當(dāng)中去做。

27.Android本身的api并未聲明會拋出異常奥溺,則其在運行時有無可能拋出runtime異常辞色,你遇到過嗎?諾有的話會導(dǎo)致什么問題?如何解決?
有可能,比如空指針異常浮定、數(shù)組下表越界等異常相满,這些異常拋出后可能會導(dǎo)致程序FC。在編寫代碼時應(yīng)該做好檢測桦卒,多考慮可能會發(fā)生錯誤的情況立美,從代碼層次解決這些問題。

28.為什么要用 ContentProvider?它和 sql 的實現(xiàn)上有什么差別?
使用ContentProvider 可以將數(shù)據(jù)共享給其他應(yīng)用方灾,讓除本應(yīng)用之外的應(yīng)用也可以訪問本應(yīng)用的數(shù)據(jù)建蹄。它的底層是用SQLite 數(shù)據(jù)庫實現(xiàn)的碌更,所以其對數(shù)據(jù)做的各種操作都是以Sql實現(xiàn),只是在上層提供的是Uri洞慎。

29.談?wù)?UI 中, Padding 和 Margin 有什么區(qū)別?
padding指內(nèi)邊距痛单,表示組件內(nèi)部元素距離組件邊框的距離。marin指外邊距劲腿,表示組件與組件之間的距離旭绒。

30.請介紹下 Android 的數(shù)據(jù)存儲方式。
Android 提供了5種方式存儲數(shù)據(jù):1)使用SharedPreferences存儲數(shù)據(jù)焦人;2)文件存儲數(shù)據(jù)挥吵;3)SQLite數(shù)據(jù)庫存儲數(shù)據(jù);4)使用ContentProvider存儲數(shù)據(jù)花椭;5)網(wǎng)絡(luò)存儲數(shù)據(jù)蔫劣;
31、MVP个从,MVC和MVVP架構(gòu):
以login為例脉幢,MVC中LoginActivity既要控制登錄的邏輯又要控制view的顯示,不夠解耦嗦锐。
MVP中LoginActivity僅作為view的顯示嫌松,增加一層Presenter層,由Presenter做view和model的control奕污。
MVVP中LoginActivity做view展示并做數(shù)據(jù)綁定的邏輯處理萎羔,LoginActivity的layout的xml中做數(shù)據(jù)的綁定,省去Presenter層碳默。
32贾陷、你常用的設(shè)計模式有哪些?
單列模式嘱根、builder模式髓废、觀察者模式、訂閱者模式该抒、工廠模式慌洪、代理模式、策略模式凑保、適配器模式冈爹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市欧引,隨后出現(xiàn)的幾起案子频伤,更是在濱河造成了極大的恐慌,老刑警劉巖芝此,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憋肖,死亡現(xiàn)場離奇詭異因痛,居然都是意外死亡,警方通過查閱死者的電腦和手機瞬哼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來租副,“玉大人坐慰,你說我怎么就攤上這事∮蒙” “怎么了结胀?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長责循。 經(jīng)常有香客問我糟港,道長,這世上最難降的妖魔是什么院仿? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任秸抚,我火速辦了婚禮,結(jié)果婚禮上歹垫,老公的妹妹穿的比我還像新娘剥汤。我一直安慰自己,他們只是感情好排惨,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布吭敢。 她就那樣靜靜地躺著,像睡著了一般暮芭。 火紅的嫁衣襯著肌膚如雪鹿驼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天辕宏,我揣著相機與錄音畜晰,去河邊找鬼。 笑死瑞筐,一個胖子當(dāng)著我的面吹牛舷蟀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播面哼,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼野宜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了魔策?” 一聲冷哼從身側(cè)響起匈子,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闯袒,沒想到半個月后虎敦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體游岳,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年其徙,在試婚紗的時候發(fā)現(xiàn)自己被綠了胚迫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡唾那,死狀恐怖访锻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闹获,我是刑警寧澤期犬,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站避诽,受9級特大地震影響龟虎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沙庐,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一鲤妥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拱雏,春花似錦旭斥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至羡滑,卻和暖如春菇爪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柒昏。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工凳宙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人职祷。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓氏涩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親有梆。 傳聞我的和親對象是個殘疾皇子是尖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容