




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 抽象類和接口的區(qū)別?抽象類:1)抽象方法,只有行為的概念,沒有具體的行為實(shí)現(xiàn)。使用abstract關(guān)鍵字修飾,沒有方法體。子類必須重寫這些抽象方法。2)包含抽象方法的類,一定是抽象類。3)抽象類只能被繼承,一個(gè)類只能繼承一個(gè)抽象類。接口:1)全部的方法都是抽象方法,屬型都是常量2)不能實(shí)例化,可以定義變量。3)接口變量可以引用具體實(shí)現(xiàn)類的實(shí)例4)接口只能被實(shí)現(xiàn),一個(gè)具體類實(shí)現(xiàn)接口,必須實(shí)現(xiàn)全部的抽象方法5)接口之間可以多實(shí)現(xiàn)6)一個(gè)具體類可以實(shí)現(xiàn)多個(gè)接口,實(shí)現(xiàn)多繼承現(xiàn)象2 列舉你所知道的線程同步的方法:1)wait():讓線程等待。將線程存儲(chǔ)到一個(gè)線程池中。2)notify():?jiǎn)拘驯坏却?/p>
2、的線程。通常都喚醒線程池中的第一個(gè)。讓被喚醒的線程處于臨時(shí)阻塞狀態(tài)。3)notifyAll(): 喚醒所有的等待線程。將線程池中的所有線程都喚醒。3 簡(jiǎn)述String和StringBuffer、ArrayList和LinkedList、HashMap和HashTable的特點(diǎn)及區(qū)別。答:String 對(duì)象的長(zhǎng)度一旦定義就固定就不可以改變,對(duì)于已經(jīng)存在的String對(duì)象的修改都是創(chuàng)建一個(gè)新的對(duì)象,然后把新的值存進(jìn)去,String類不能被繼承。StringBuffer是一個(gè)可變對(duì)象,當(dāng)對(duì)它進(jìn)行修改的時(shí)候不會(huì)像String那樣重新建立對(duì)象。它只能通過構(gòu)造函數(shù)來建立對(duì)象。另外StringBuffer還
3、是一個(gè)線程安全的類。ArrayList是實(shí)現(xiàn)了基于動(dòng)態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu)用于,LinkedList基于連表的數(shù)據(jù)結(jié)構(gòu),二者都可以存儲(chǔ)對(duì)象的引用。對(duì)于隨機(jī)訪問get和set,ArrayList優(yōu)于LinkedList,因?yàn)長(zhǎng)inkedList要移動(dòng)指針。對(duì)于新增和刪除操作add和remove,LinkedList比較占優(yōu)勢(shì),因?yàn)锳rrayList要移動(dòng)數(shù)據(jù)。HashMap是Hashtable的輕量級(jí)實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,在只有一個(gè)線程訪問的情況下,效率要高于Hashtable。HashMap允許將
4、null作為一個(gè)entry的key或者value,而Hashtable不允許。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因?yàn)閏ontains方法容易讓人引起誤解。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采用的h
5、ash/rehash算法都大概一樣,所以性能不會(huì)有很大的差異。就HashMap與HashTable主要從三方面來說。一.歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進(jìn)的Map接口的一個(gè)實(shí)現(xiàn)二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的三.值:只有HashMap可以讓你將空值作為一個(gè)表的條目的key或value4 什么是java序列化,如何事件java序列化序列化就是一種用來處理對(duì)象流的機(jī)制,所謂對(duì)象流也就是將對(duì)象的內(nèi)容進(jìn)行流化??梢詫?duì)流化后的對(duì)象進(jìn)行讀寫操作,也可將流化后的對(duì)象傳
6、輸于網(wǎng)絡(luò)之間。序列化是為了解決在對(duì)對(duì)象流進(jìn)行讀寫操作時(shí)所引發(fā)的問題。public class Cat implements Serializable Try FileOutputStream fos = new FileOutputStream("catDemo.out"); ObjectOutputStream oos = new ObjectOutputStream(fos); System.out.println(" 1> " + cat.getName(); cat.setName("My Cat"); oos.writ
7、eObject(cat); oos.close(); catch(Exception e)5 多線程有幾種實(shí)現(xiàn)方式,同步有幾種實(shí)現(xiàn)方式,stop()和suspend()方法為什么不推薦使用多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口 同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify"反對(duì)使用stop(),是因?yàn)樗话踩?。它?huì)解除由線程獲取的所有鎖定,而且如果對(duì)象處于一種不連貫狀態(tài),那么其他線程能在那種狀態(tài)下檢查和修改它們。結(jié)果很難檢查出真正的問題所在。suspend()方法容易發(fā)生死鎖。 調(diào)用suspend()的時(shí)候,目標(biāo)線程會(huì)
8、停下來,但卻仍然持有在這之前獲得的鎖定。此時(shí),其他任何線程都不能訪問鎖定的資源,除非被"掛起"的線程恢復(fù) 運(yùn)行。對(duì)任何線程來說,如果它們想恢復(fù)目標(biāo)線程,同時(shí)又試圖使用任何一個(gè)鎖定的資源,就會(huì)造成死鎖。所以不應(yīng)該使用suspend(),而應(yīng)在自己的 Thread類中置入一個(gè)標(biāo)志,6 簡(jiǎn)述你對(duì)java反射機(jī)制的理解JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性7 寫下你對(duì)多線程的理解,怎么創(chuàng)建一個(gè)線程以及線程同步的方法。1.多線程是操作系統(tǒng)的重要部分,可以提高應(yīng)用程序的效率,將耗時(shí)操作放進(jìn)工作
9、線程,可以有效提高用戶體驗(yàn)。2.new Thread().start,在方法中重寫run方法;新建類實(shí)現(xiàn)Runable接口,重寫其抽象方法3.public static synchronized void test() public void test2() synchronized(lock) 8 從操作系統(tǒng)角度請(qǐng)闡述一下線程與進(jìn)程的區(qū)別答:進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位,線程是CPU調(diào)度和分派的基本單位進(jìn)程和線程的關(guān)系:(1)一個(gè)線程只能屬于一個(gè)進(jìn)程,而一個(gè)進(jìn)程可以有多個(gè)線程,但至少有一個(gè)線程。(2)資源分配給進(jìn)程,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源。(3)線程在執(zhí)行過程中
10、,需要協(xié)作同步。不同進(jìn)程的線程間要利用消息通信的辦法實(shí)現(xiàn)同步。(5)線程是指進(jìn)程內(nèi)的一個(gè)執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實(shí)體。線程與進(jìn)程的區(qū)別:(1)調(diào)度:線程作為調(diào)度和分配的基本單位,進(jìn)程作為擁有資源的基本單位。(2)并發(fā)性:不僅進(jìn)程之間可以并發(fā)執(zhí)行,同一個(gè)進(jìn)程的多個(gè)線程之間也可以并發(fā)執(zhí)行。(3)擁有資源:進(jìn)程是擁有資源的一個(gè)獨(dú)立單位,線程不擁有系統(tǒng)資源,但可以訪問隸屬于進(jìn)程的資源。(4)系統(tǒng)開銷:在創(chuàng)建或撤銷進(jìn)程的時(shí)候,由于系統(tǒng)都要為之分配和回收資源,導(dǎo)致系統(tǒng)的明顯大于創(chuàng)建或撤銷線程時(shí)的開銷。但進(jìn)程有獨(dú)立的地址空間,進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其他的進(jìn)程產(chǎn)生影響,而線程只是一個(gè)進(jìn)程中的不同的
11、執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨(dú)的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序健壯,但是在進(jìn)程切換時(shí),耗費(fèi)的資源較大,效率要差些。9 Android系統(tǒng)的架構(gòu),采用了分層的架構(gòu),從高層到底層分別是:1.Android系統(tǒng)架構(gòu)之應(yīng)用程序Android會(huì)同一系列核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是使用JAVA語言編寫的。2.Android系統(tǒng)架構(gòu)之應(yīng)用程序框架開發(fā)人員可以完全訪問核心應(yīng)用程序所使用的API框架(android.jar)。該應(yīng)用程序的架
12、構(gòu)設(shè)計(jì)簡(jiǎn)化了組件的重用;任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊。3.Android系統(tǒng)架構(gòu)之系統(tǒng)運(yùn)行庫1)程序庫Android 包含一些C/C+庫,這些庫能被Android系統(tǒng)中不同的組件使用。它們通過 Android 應(yīng)用程序框架為開發(fā)者提供服務(wù)。4.Android系統(tǒng)架構(gòu)之Linux 內(nèi)核Android 的核心系統(tǒng)服務(wù)依賴于 Linux 2.6 內(nèi)核,如安全性,內(nèi)存管理,進(jìn)程管理, 網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型。 Linux 內(nèi)核也同時(shí)作為硬件和軟件棧之間的抽象層。10 消息推送的方式有哪幾種,每種方式的優(yōu)缺點(diǎn)是什么?前Android上主要的推送實(shí)現(xiàn)方
13、案有以下幾種:方案1、使用極光和友盟推送。方案2、使用XMPP協(xié)議(Openfire + Spark + Smack)簡(jiǎn)介:基于XML協(xié)議的通訊協(xié)議,前身是Jabber,目前已由IETF國(guó)際標(biāo)準(zhǔn)化組織完成了標(biāo)準(zhǔn)化工作。優(yōu)點(diǎn):協(xié)議成熟、強(qiáng)大、可擴(kuò)展性強(qiáng)、目前主要應(yīng)用于許多聊天系統(tǒng)中,且已有開源的Java版的開發(fā)實(shí)例androidpn。缺點(diǎn):協(xié)議較復(fù)雜、冗余(基于XML)、費(fèi)流量、費(fèi)電,部署硬件成本高。 方案3、使用MQTT協(xié)議(更多信息見:/)簡(jiǎn)介:輕量級(jí)的、基于代理的“發(fā)布/訂閱”模式的消息傳輸協(xié)議。優(yōu)點(diǎn):協(xié)議簡(jiǎn)潔、小巧、可擴(kuò)展性強(qiáng)、省流量、省電,目前已經(jīng)應(yīng)用到企業(yè)
14、領(lǐng)域(參考:/software),且已有C+版的服務(wù)端組件rsmb。缺點(diǎn):不夠成熟、實(shí)現(xiàn)較復(fù)雜、服務(wù)端組件rsmb不開源,部署硬件成本較高。 方案4、使用HTTP輪循方式簡(jiǎn)介:定時(shí)向HTTP服務(wù)端接口(Web Service API)獲取最新消息。優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單、可控性強(qiáng),部署硬件成本低。缺點(diǎn):實(shí)時(shí)性差。 11 android的數(shù)據(jù)存儲(chǔ)的方式?答:Android提供了5種方式存儲(chǔ)數(shù)據(jù):(1)使用SharedPreferences存儲(chǔ)數(shù)據(jù);它是Android提供的用來存儲(chǔ)一些簡(jiǎn)單配置信息的一種機(jī)制,采用了XML格式將數(shù)據(jù)存儲(chǔ)到設(shè)備中。只能在同一個(gè)包內(nèi)使用,不能在不同的
15、包之間使用。(2)文件存儲(chǔ)數(shù)據(jù);文件存儲(chǔ)方式是一種較常用的方法,在Android中讀取/寫入文件的方法,與Java中實(shí)現(xiàn)I/O的程序是完全一樣的,提供了openFileInput()和openFileOutput()方法來讀取設(shè)備上的文件。(3)SQLite數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù);SQLite是Android所帶的一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)庫,它支持SQL語句,它是一個(gè)輕量級(jí)的嵌入式數(shù)據(jù)庫。(4)使用ContentProvider存儲(chǔ)數(shù)據(jù);主要用于應(yīng)用程序之間進(jìn)行數(shù)據(jù)交換,從而能夠讓其他的應(yīng)用保存或讀取此Content Provider的各種數(shù)據(jù)類型。(5)網(wǎng)絡(luò)存儲(chǔ)數(shù)據(jù);通過網(wǎng)絡(luò)上提供給我們的存儲(chǔ)空間來上傳(存儲(chǔ)
16、)和下載(獲取)我們存儲(chǔ)在網(wǎng)絡(luò)空間中的數(shù)據(jù)信息。12 橫豎屏切換時(shí)候activity的生命周期?不設(shè)置Activity的android:configChanges時(shí),切屏?xí)匦抡{(diào)用各個(gè)生命周期,設(shè)置Activity的android:configChanges="orientation|keyboardHidden"時(shí),切屏不會(huì)重新 調(diào)用各個(gè)生命周期,只會(huì)執(zhí)行onConfigurationChanged方法13 Android中動(dòng)畫分為哪幾類?他們的特點(diǎn)和區(qū)分有那些?一種是tweened animation(補(bǔ)間動(dòng)畫) 一種是frame by frame(逐幀動(dòng)畫) 特點(diǎn):補(bǔ)
17、間動(dòng)畫是通過改變view的大小、旋轉(zhuǎn)的角度、透明度、位置來產(chǎn)生動(dòng)畫,可以控制動(dòng)畫的播放快慢以及加速度。逐幀動(dòng)畫是用一組圖片輪流繪制,產(chǎn)生動(dòng)畫的感覺。類似于gif圖片。區(qū)別:補(bǔ)間動(dòng)畫的所有操作是通過矩陣變換對(duì)同一個(gè)物體(繪制的一個(gè)view或者圖片)進(jìn)行操作產(chǎn)生動(dòng)畫。而逐幀動(dòng)畫是多個(gè)物體(多張圖片)進(jìn)行繪制,可以說這多張圖片是不相關(guān)的(從播放的角度來看只能說是內(nèi)容相關(guān))。14 請(qǐng)解釋下在單線程模式中Message,Handler,MessageQueue,Looper之間的關(guān)系解釋下.Handler獲取當(dāng)前線程中的looper對(duì)象,looper用來從存放Message的MessageQueue中取
18、出Message,再有Handler進(jìn)行Message的分發(fā)和處理. Message Queue(消息隊(duì)列):用來存放通過Handler發(fā)布的消息,通常附屬于某一個(gè)創(chuàng)建它的線程,可以通過Looper.myQueue()得到當(dāng)前線程的消息隊(duì)列. Handler:可以發(fā)布或者處理一個(gè)消息或者操作一個(gè)Runnable,通過Handler發(fā)布消息,消息將只會(huì)發(fā)送到與它關(guān)聯(lián)的消息隊(duì)列,然也只能處理該消息隊(duì)列中的消息. Looper:是Handler和消息隊(duì)列之間通訊橋梁,程序組件首先通過Handler把消息傳遞給Looper,Looper把消息放入隊(duì)列。 Looper也把消息隊(duì)列里的消息廣播給所有的Ha
19、ndler:Handler接受到消息后調(diào)用handleMessage進(jìn)行處理. 15 說說mvc模式的原理,它在android中的運(yùn)用答:android的官方建議應(yīng)用程序的開發(fā)采用mvc模式。何謂mvc?mvc是model,view,controller的縮寫,mvc包含三個(gè)部分: l模型(model)對(duì)象:是應(yīng)用程序的主體部分,所有的業(yè)務(wù)邏輯都應(yīng)該寫在該層。2視圖(view)對(duì)象:是應(yīng)用程序中負(fù)責(zé)生成用戶界面的部分。也是在整個(gè)mvc架構(gòu)中用戶唯一可以看到的一層,接收用戶的輸入,顯示處理結(jié)果。3控制器(control)對(duì)象:是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示及更新model對(duì)象狀
20、態(tài)的部分,控制器更重要的一種導(dǎo)航功能,想用用戶出發(fā)的相關(guān)事件,交給m哦得了處理。在android中mvc的具體體現(xiàn)如下: 1)視圖層(view):一般采用xml文件進(jìn)行界面的描述,使用的時(shí)候可以非常方便的引入,當(dāng)然,如何你對(duì)android了解的比較的多了話,就一定 可以想到在android中也可以使用javascript+html等的方式作為view層,當(dāng)然這里需要進(jìn)行java和javascript之間的通 信,幸運(yùn)的是,android提供了它們之間非常方便的通信實(shí)現(xiàn)。2)控制層(controller):android的控制層的重 任通常落在了眾多的acit
21、vity的肩上,這句話也就暗含了不要在acitivity中寫代碼,要通過activity交割model業(yè)務(wù)邏輯層處理, 這樣做的另外一個(gè)原因是android中的acitivity的響應(yīng)時(shí)間是5s,如果耗時(shí)的操作放在這里,程序就很容易被回收掉。3)模型層(model):對(duì)數(shù)據(jù)庫的操作、對(duì)網(wǎng)絡(luò)等的操作都應(yīng)該在model里面處理,當(dāng)然對(duì)業(yè)務(wù)計(jì)算等操作也是必須放在的該層的。16 請(qǐng)描述下Activity的生命周期.onCreate(Bundle savedInstanceState):創(chuàng)建activity時(shí)調(diào)用。設(shè)置在該方法中,還以Bundle的形式提供對(duì)以前儲(chǔ)存的任何狀態(tài)的訪問!onStart():
22、activity變?yōu)樵谄聊簧蠈?duì)用戶可見時(shí)調(diào)用。onResume():activity開始與用戶交互時(shí)調(diào)用(無論是啟動(dòng)還是重新啟動(dòng)一個(gè)活動(dòng),該方法總是被調(diào)用的)。 onPause():activity被暫?;蚴栈豤pu和其他資源時(shí)調(diào)用,該方法用于保存活動(dòng)狀態(tài)的,也是保護(hù)現(xiàn)場(chǎng),壓棧吧!onStop():activity被停止并轉(zhuǎn)為不可見階段及后續(xù)的生命周期事件時(shí)調(diào)用。onRestart():重新啟動(dòng)activity時(shí)調(diào)用。該活動(dòng)仍在棧中,而不是啟動(dòng)新的活 動(dòng)。OnDestroy():activity被完全從系統(tǒng)內(nèi)存中移除時(shí)調(diào)用該方法17 Android中4大組件有哪些?他們的作用是什么?Activ
23、ity:Activity是Android程序與用戶交互的窗口,是Android構(gòu)造塊中最基本的一種,它需要為保持各界面的狀態(tài),做很多持久化的事情,妥善管理生命周期以及一些跳轉(zhuǎn)邏輯。 service:后臺(tái)服務(wù)于Activity,封裝有一個(gè)完整的功能邏輯實(shí)現(xiàn),接受上層指令,完成相關(guān)的事務(wù),定義好需要接受的Intent提供同步和異步的接口。 Content Provider:是Android提供的第三方應(yīng)用數(shù)據(jù)的訪問方案,可以派生Content Provider類,對(duì)外提供數(shù)據(jù),可以像數(shù)據(jù)庫一樣進(jìn)行選擇排序,屏蔽內(nèi)部數(shù)據(jù)的存儲(chǔ)細(xì)節(jié),向外提供統(tǒng)一的接口模型,大大簡(jiǎn)化上層應(yīng)用,對(duì)數(shù)據(jù)的整合提 供了更方便
24、的途徑。 BroadCast Receiver:接受一種或者多種Intent作觸發(fā)事件,接受相關(guān)消息,做一些簡(jiǎn)單處理,轉(zhuǎn)換成一條Notification,統(tǒng)一了Android的事件廣播模型。 18 Activity有哪4種啟動(dòng)模式?有哪些特點(diǎn)?standard 默認(rèn)模式 - 來了intent,每次都創(chuàng)建新的實(shí)例。singleTop - 來了intent, 每次都創(chuàng)建新的實(shí)例,僅一個(gè)例外:當(dāng)棧頂?shù)腶ctivity 恰恰就是該activity的實(shí)例(即需要?jiǎng)?chuàng)建的實(shí)例)時(shí),不再創(chuàng)建新實(shí)例。這解決了棧頂復(fù)用問題,想一想,你按兩次back鍵,退出的都是同一個(gè)activity,這感覺肯定不爽。single
25、Task - 來了intent后,檢查棧中是否存在該activity的實(shí)例,如果存在就把intent發(fā)送給它,否則就創(chuàng)建一個(gè)新的該activity的實(shí)例,棧中只能有它一個(gè)該activity實(shí)例,但允許其他activity加入該棧。解決了在一 個(gè)task中共享一個(gè)activity。singleInstance - 肯定位于一個(gè)task的棧底, 并且是該棧唯一的activity。解決了多個(gè)task共享一個(gè)activity。19 注冊(cè)廣播有幾種方式,這些方式有何特點(diǎn)?1)動(dòng)態(tài)代碼注冊(cè)不是常駐型廣播,也就是說廣播跟隨程序的生命周期。2)清單文件注冊(cè)是常駐型,也就是說當(dāng)應(yīng)用程序關(guān)閉后,如果有信息廣播來,
26、程序也會(huì)被系統(tǒng)調(diào)用自動(dòng)運(yùn)行。20 談?wù)剬?duì)android內(nèi)存優(yōu)化的方法,方案,規(guī)則及對(duì)內(nèi)存泄漏如何避免OOM即Out Of Memory,一般是由程序編寫者對(duì)內(nèi)存使用不當(dāng),如對(duì)該釋放的內(nèi)存資源沒有釋放,導(dǎo)致其一直不能被再次使用而使內(nèi)存被耗盡的現(xiàn)象。根本的解決辦法是對(duì)代碼進(jìn)行優(yōu)化:在內(nèi)存引用上做些處理,使用軟引用、虛引用、和弱引用;在內(nèi)存中加載圖片時(shí)直接在內(nèi)存中做處理,如邊界壓縮等;建立動(dòng)態(tài)回收內(nèi)存機(jī)制;優(yōu)化Dalvik虛擬機(jī)的堆內(nèi)存分配;自定義堆內(nèi)存大小等。一般而言,android中常見的原因主要有以下幾個(gè):1.數(shù)據(jù)庫的cursor沒有關(guān)閉。2.構(gòu)造adapter沒有使用緩存contentvie
27、w。3.調(diào)用registerReceiver()后未調(diào)用unregisterReceiver().4.未關(guān)閉InputStream/OutputStream。5.Bitmap使用后未調(diào)用recycle()。6.Context泄漏。7.static關(guān)鍵字等。21 啟動(dòng)service有幾種方式,說出他們之間的主要區(qū)別答:調(diào)用startService():通過此種方法啟動(dòng)的service會(huì)一直運(yùn)行在后臺(tái)直到stopService()或stopSelf()方法被調(diào)用。調(diào)用bindService():通過此種方法啟動(dòng)的service會(huì)與調(diào)用者綁定,如果這個(gè)service還沒有被啟動(dòng),那么service啟
28、動(dòng)時(shí)將不會(huì)調(diào)用onStart(),只調(diào)用onCreate()和onBind(),調(diào)用者被銷毀時(shí),service也被銷毀22 intent.putExtra時(shí),如果傳遞的不是基本類型,而是一個(gè)”O(jiān)bject”,那么對(duì)這個(gè)對(duì)象有什么要求?還是說任何對(duì)象都可以進(jìn)行傳遞?答:必須實(shí)現(xiàn)Serializable接口,或者實(shí)現(xiàn)Parcelable接口的對(duì)象才可以進(jìn)行傳遞。 23 當(dāng)調(diào)用startActivityForResult時(shí),如何獲取并處理返回的結(jié)構(gòu)答:通過onActivityResult(int requestCode, int resultCode, Intent data)處理返回的數(shù)據(jù)requ
29、estCode:調(diào)用startActivityForResult(Intent intent, int requestCode)時(shí)傳遞過去的請(qǐng)求碼。resultCode:被調(diào)用的Activity執(zhí)行setResult(int resultCode, Intent intent)時(shí)傳遞的結(jié)果碼,一般有RESULT_CANCELED,RESULT_OK等,用于區(qū)分被調(diào)用的Activity傳回的不同結(jié)果data:被調(diào)用的Activity傳回來的數(shù)據(jù),可以用data.getExtras()得到數(shù)據(jù),用Bundle類型的變量來接收,調(diào)用get(String key)來獲取對(duì)應(yīng)的值24 使用startSe
30、rvice()和bindService()啟一個(gè)Service,這個(gè)Sercice的生命周期會(huì)有哪里不同? 答: 1.Context.startService()方式的生命周期: 啟動(dòng)時(shí),startService > onCreate() > onStart()停止時(shí),stopService > onDestroy()如果調(diào)用者直接退出而沒有停止Service,則Service 會(huì)一直在后臺(tái)運(yùn)行 Context.startService()方法啟動(dòng)服務(wù),在服務(wù)未被創(chuàng)建時(shí),系統(tǒng)會(huì)先調(diào)用服務(wù)的onCreate()方法,接著調(diào)用onStart()方法。如果調(diào)用startServic
31、e()方法前服務(wù)已經(jīng)被創(chuàng)建,多次調(diào)用startService()方法并不會(huì)導(dǎo)致多次創(chuàng)建服務(wù),但會(huì)導(dǎo)致多次調(diào)用onStart()方法。采用startService()方法啟動(dòng)的服務(wù),只能調(diào)用Context.stopService()方法結(jié)束服務(wù),服務(wù)結(jié)束時(shí)會(huì)調(diào)用onDestroy()方法附代碼2.Context.bindService()方式啟動(dòng):Context.bindService()方式的生命周期: 綁定時(shí),bindService -> onCreate() > onBind()調(diào)用者退出了,即解綁定時(shí),Srevice就會(huì)unbindService >onUnbind()
32、 > onDestory()Context.bindService()方式啟動(dòng) Service的方法:綁定Service需要三個(gè)參數(shù):bindService(intent, conn, Service.BIND_AUTO_CREATE);第一個(gè):Intent對(duì)象第二個(gè):ServiceConnection對(duì)象,創(chuàng)建該對(duì)象要實(shí)現(xiàn)它的onServiceConnected()和 onServiceDisconnected()來判斷連接成功或者是斷開連接第三個(gè):如何創(chuàng)建Service,一般指定綁定的時(shí)候自動(dòng)創(chuàng)建。25 Android中什么是ANR,如何應(yīng)對(duì)或者如何避免它?答: ANR 就是appl
33、ication not responding 在android中Activity的最長(zhǎng)執(zhí)行時(shí)間是5秒.BroadcastReceiver的最長(zhǎng)執(zhí)行時(shí)間則是10秒.超出執(zhí)行時(shí)間就會(huì)產(chǎn)生ANR.解決方法: 1.運(yùn)行在主線程里的任何方法都盡可能少做事情。特別是,Activity應(yīng)該在它的關(guān)鍵生命周期方法 (如onCreate()和onResume())里盡可能少的去做創(chuàng)建操作。(可以采用重新開啟子線程的方式,然后使用Handler+Message 的方式做一些操作,比如更新主線程中的ui等) 2. 應(yīng)用程序應(yīng)該避免在BroadcastReceiver里做耗時(shí)的操作或計(jì)算。但不再是在子線程里做這些任務(wù)
34、(因?yàn)?BroadcastReceiver的生命周期短),替代的是,如果響應(yīng)Intent廣播需要執(zhí)行一個(gè)耗時(shí)的動(dòng)作的話,應(yīng)用程序應(yīng)該啟動(dòng)一個(gè) Service。26 AIDL 的全稱是什么?如何工作?能處理哪些類型的數(shù)據(jù)? 答: AIDL: (Android Interface Definition Language)跨進(jìn)程通信傳輸語言 如何工作:AIDL文件由自己定義,在被綁定的Service中和綁定的客戶端中都要部署 1.創(chuàng)建AIDL文件, 在這個(gè)文件里面定義接口, 該接口定義了可供客戶端訪問的方法和屬性。2、編譯AIDL文件, 用Ant的話, 可能需
35、要手 動(dòng), 使用Eclipse plugin的話,可以根據(jù)adil文件自動(dòng)生產(chǎn)java文件并編譯, 不需要人為介入.3、在Java文件中, 實(shí)現(xiàn) AIDL中定義的接口. 編譯器會(huì)根據(jù)AIDL接口, 產(chǎn)生一個(gè)JAVA接口。這個(gè)接口有一個(gè)名為Stub的內(nèi)部抽象類,它繼承擴(kuò)展 了接口并實(shí)現(xiàn)了遠(yuǎn)程調(diào) 用需要的幾個(gè)方法(是Binder的子類)。接下來就需 要自己去實(shí)現(xiàn)自定義的幾個(gè)接口了.4.第一個(gè)程序的Service:因?yàn)榭邕M(jìn)程傳遞時(shí)利用Binder對(duì)象來實(shí)現(xiàn)的,所以我們要在Service端構(gòu)建Binder對(duì)象,又因?yàn)槲覀兌x的接口AIDL文件
36、在編譯轉(zhuǎn)成.java時(shí)的內(nèi)部類Sub實(shí)現(xiàn)了Binder,所以我們構(gòu)建Binder對(duì)象時(shí)構(gòu)建實(shí)例內(nèi)部類直接繼承Sub內(nèi)部類,在類中我們可以調(diào)用Service中的方法,此類的對(duì)象也就是Binder對(duì)象.5.第二個(gè)程序的Activity:在Activity中我們利用bindService方法啟動(dòng)一個(gè)綁定的Service的同時(shí)需要傳入連接對(duì)象,所以我們先在Activity中構(gòu)建Service的連接對(duì)象,在該對(duì)象的匿名內(nèi)部類中重寫獲得Binder對(duì)象的方法,參數(shù)含有Binder對(duì)象,將此對(duì)象強(qiáng)制轉(zhuǎn)換成我們?cè)赟ervice中繼承Sub的類的對(duì)象,強(qiáng)轉(zhuǎn)后我們可以利用該對(duì)象調(diào)用Service中的方法,從而實(shí)現(xiàn)
37、跨進(jìn)程通信,控制Service.27 請(qǐng)簡(jiǎn)單介紹一下NDK。NDK全稱:Native Development Kit。1、NDK是一系列工具的集合。* NDK提供了一系列的工具,幫助開發(fā)者快速開發(fā)C(或C+)的動(dòng)態(tài)庫,并能自動(dòng)將so和java應(yīng)用一起打包成apk。這些工具對(duì)開發(fā)者的幫助是巨大的。28 你后臺(tái)的Activity被系統(tǒng)回收怎么辦:當(dāng)你的程序中某一個(gè)Activity A 在運(yùn)行時(shí)中,主動(dòng)或被動(dòng)地運(yùn)行另一個(gè)新的Activity B 這個(gè)時(shí)候A會(huì)執(zhí)行Java代碼publicvoid onSaveInstanceState(Bundle outState) super.onSaveInst
38、anceState(outState);outState.putLong("id", 1234567890);public voidonSaveInstanceState(Bundle outState) B 完成以后又會(huì)來找A, 這個(gè)時(shí)候就有兩種情況,一種是A被回收,一種是沒有被回收,被回 收的A就要重新調(diào)用onCreate()方法,不同于直接啟動(dòng)的是這回 onCreate()里是帶上參數(shù) savedInstanceState,沒被收回的就還是onResume就好了。savedInstanceState是一個(gè)Bundle對(duì)象,你基本上可以把他理解為系統(tǒng)幫你維護(hù)的一個(gè)Map
39、對(duì)象。在onCreate()里你可能會(huì)用到它,如果正常啟動(dòng)onCreate就不會(huì)有它,所以用的時(shí)候要判斷一下是否為空。Java代碼if(savedInstanceState !=null)long id =savedInstanceState.getLong("id");if(savedInstanceState !=null)就像官方的Notepad教程里的情況,你正在編輯某一個(gè)note,突然被中斷,那么就把這個(gè)note的id記住,再起來的時(shí)候就可以根據(jù)這個(gè)id去把那個(gè)note取出來。29 怎么優(yōu)化listview1、 如果自定義適配器,那么在getView方法中要考慮方
40、法傳進(jìn)來的參數(shù)contentView是否為null,如果為null就創(chuàng)建contentView并返回,如果不為null則直接使用。在這個(gè)方法中盡可能少創(chuàng)建view。2、給contentView設(shè)置tag(setTag(),傳入一個(gè)viewHolder對(duì)象,用于緩存要顯示的數(shù)據(jù),可以達(dá)到圖像數(shù)據(jù)異步加載的效果。3、如果listview需要顯示的item很多,就要考慮分頁加載。比如一共要顯示100條或者更多的時(shí)候,我們可以考慮先加載20條,等用戶拉到列表底部的時(shí)候再去加載接下來的20條。4、 設(shè)置listview的監(jiān)聽器,如果listview是飛快滑動(dòng)狀態(tài)則不更新view30 根據(jù)自己的理解描述下
41、Android數(shù)字簽名。(1)所有的應(yīng)用程序都必須有數(shù)字證書,Android系統(tǒng)不會(huì)安裝一個(gè)沒有數(shù)字證書的應(yīng)用程序(2)Android程序包使用的數(shù)字證書可以是自簽名的,不需要一個(gè)權(quán)威的數(shù)字證書機(jī)構(gòu)簽名認(rèn)證(3)如果要正式發(fā)布一個(gè)Android ,必須使用一個(gè)合適的私鑰生成的數(shù)字證書來給程序簽名。(4)數(shù)字證書都是有有效期的,Android只是在應(yīng)用程序安裝的時(shí)候才會(huì)檢查證書的有效期。如果程序已經(jīng)安裝在系統(tǒng)中,即使證書過期也不會(huì)影響程序的正常功能。31 簡(jiǎn)述Android root機(jī)制答:root指的是你有權(quán)限可以再系統(tǒng)上對(duì)所有檔案有 "讀" "寫" &
42、quot;執(zhí)行"的權(quán)力。root機(jī)器不是真正能讓你的應(yīng)用程序具有root權(quán)限。它原理就跟linux下的像sudo這樣的命令。在系統(tǒng)的bin目錄下放個(gè)su程序并屬主是root并有suid權(quán)限。則通過su執(zhí)行的命令都具有Android root權(quán)限。當(dāng)然使用臨時(shí)用戶權(quán)限想把su拷貝的/system/bin目錄并改屬性并不是一件容易的事情。這里用到2個(gè)工具跟2個(gè)命令。把busybox拷貝到你有權(quán)限訪問的目錄然后給他賦予4755權(quán)限,你就可以用它做很多事了。32 進(jìn)程間通信機(jī)制,傳統(tǒng)IPC 和 Binder答:傳統(tǒng)的進(jìn)程間通信機(jī)制IPC 有管道(Pipe)、信號(hào)(Signal)和跟蹤(Tra
43、ce),這三項(xiàng)通信手段只能用于父進(jìn)程和子進(jìn)程之間,或者兄弟進(jìn)程之間;后來又增加了命令管道(Named Pipe),使得進(jìn)程間通信不再局限于父子進(jìn)程或兄弟進(jìn)程之間。后來又出現(xiàn)了報(bào)文隊(duì)列(Message)、共享內(nèi)存(Share Memeory)和信號(hào)量(Semaphore)。Android系統(tǒng)沒有采用上述提到的各種進(jìn)程間通信機(jī)制,而是采用Binder機(jī)制,它是基于OpenBinder來實(shí)現(xiàn)的。它提供了遠(yuǎn)程過程調(diào)用(RPC)功能,在Android系統(tǒng)的Binder機(jī)制中,有一系列組件組成包括 Client、Server、ServiceManager和Binder驅(qū)動(dòng)程序。33 Serializabl
44、e和Parcelable的特點(diǎn)及比較答:Serializable和Parcelable二者都是實(shí)現(xiàn)序列化的接口。Parcelable,定義了將數(shù)據(jù)寫入Parcel,和從Parcel中讀出的接口。一個(gè)實(shí)體(用類來表示),如果需要封裝到消息中去,就必須實(shí)現(xiàn)這一接口,實(shí)現(xiàn)了這一接口,該實(shí)體就成為“可打包的”了。一個(gè)對(duì)象序列化的接口,一個(gè)類只有實(shí)現(xiàn)了Serializable接口,它的對(duì)象才是可序列化的。因此如果要序列化某些類的對(duì)象,這些類就必須實(shí)現(xiàn)Serializable接口。而實(shí)際上,Serializable是一個(gè)空接口,沒有什么具體內(nèi)容,它的目的只是簡(jiǎn)單的標(biāo)識(shí)一個(gè)類的對(duì)象可以被序列化。Serial
45、izable的實(shí)現(xiàn),只需要implements Serializable即可,這只是給對(duì)象打了一個(gè)標(biāo)記,系統(tǒng)會(huì)自動(dòng)將其序列化。Parcelable的實(shí)現(xiàn),需要在類中添加一個(gè)靜態(tài)成員變量CREATOR,這個(gè)變量需要繼承Parcelable.Creator接口。比較:Serializable是Java.io中的,不可被activity中的內(nèi)部類被繼承,否則出錯(cuò);Parcelable是Android特有的,比Serializable節(jié)省內(nèi)存,可以傳遞Bundle對(duì)象,當(dāng)我們有boolean型的變量可以現(xiàn)存在Bundle中。34 View、surfaceView、GLSurfaceView有什么區(qū)別V
46、iew:顯示視圖,內(nèi)置畫布,提供圖形繪制函數(shù)、觸屏事件、按鍵事件函數(shù)等,必須在UI主線程內(nèi)更新畫面,速度較慢SurfaceView:基于view視圖進(jìn)行拓展的視圖類,更適合2D游戲的開發(fā),是view的子類,類似使用雙緩機(jī)制,在新的線程中更新畫面所以刷新界面速度比view快GLSurfaceView:基于SurfaceView視圖再次進(jìn)行拓展的視圖類,專用于3D游戲開發(fā)的視圖,是surfaceView的子類,openGL專用35 你曾經(jīng)用到的android手機(jī)訪問服務(wù)端的方式有哪些? Android手機(jī)訪問服務(wù)端的方式有兩種,分別是:通過socket訪問和通過Http協(xié)議發(fā)送Post和Get請(qǐng)求
47、。 Socket是長(zhǎng)連接,服務(wù)端和客戶端之間通過Socket建立連接,首先ServerSocket將在服務(wù)端監(jiān)聽某個(gè)端口,當(dāng)發(fā)現(xiàn)客戶端有Socket來試圖連接它時(shí),它會(huì)接受該Socket的連接請(qǐng)求,同時(shí)在服務(wù)端建立一個(gè)對(duì)應(yīng)的Socket與之進(jìn)行通信。這樣就有兩個(gè)Socket了,客戶端和服務(wù)端各一個(gè)。 發(fā)送get和post協(xié)議,通過HTTP協(xié)議建立短連接??蛻舳税l(fā)送請(qǐng)求(Request),服務(wù)器端收到后根據(jù)請(qǐng)求的類型返回相應(yīng)的響應(yīng)(response)。36 什么是TCP和IP,它們位于網(wǎng)絡(luò)模型的哪層?TCP是傳輸控制協(xié)議,IP是internet協(xié)議,TCP在網(wǎng)絡(luò)模型中與UDP一樣同屬于第二層(傳
48、輸層),IP屬于三層(網(wǎng)絡(luò)層),IP用于確定主機(jī)在網(wǎng)絡(luò)中的位置,而TCP與UDP用于標(biāo)示不同的服務(wù),即應(yīng)用程序。37 Xml和json的區(qū)別1可讀性JSON和XML的可讀性可謂不相上下,一邊是建議的語法,一邊是規(guī)范的標(biāo)簽形式,很難分出勝負(fù)。2可擴(kuò)展性XML天生有很好的擴(kuò)展性,JSON當(dāng)然也有,沒有什么是XML能擴(kuò)展,JSON不能的。3.編碼難度XML有豐富的編碼工具,比如Dom4j、JDom等,JSON也有提供的工具,但是JSON的編碼明顯比XML容易許多,即使不借助工具也能寫出JSON的代碼,可是要寫好XML就不太容易了。4解碼難度XML的解析得考慮子節(jié)點(diǎn)父節(jié)點(diǎn),讓人頭昏眼花
49、,而JSON的解析難度幾乎為0。這一點(diǎn)XML輸?shù)恼媸菦]話說。5.流行度XML已經(jīng)被業(yè)界廣泛的使用,而JSON才剛剛開始,但是在Ajax這個(gè)特定的領(lǐng)域,未來的發(fā)展一定是XML讓位于JSON。38 SAX 、DOM4J 、PULL解析的區(qū)別Sax特點(diǎn) 1. 解析效率高,占用內(nèi)存少 2.可以隨時(shí)停止解析 3.不能載入整個(gè)文檔到內(nèi)存 4.不能寫入xml 5.SAX解析xml文件采用的是事件驅(qū)動(dòng)pull與sax的不同之處 1.pull讀取xml文件后觸發(fā)相應(yīng)的事件調(diào)用方法返回的是數(shù)字。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子商務(wù)物流服務(wù)合同協(xié)議書
- 全新贖樓合同
- 林業(yè)碳匯項(xiàng)目開發(fā)合作合同
- 關(guān)于合同簽訂的往來文書范例集
- 購銷合同書集合
- 《稅率》(教學(xué)設(shè)計(jì))-2024-2025學(xué)年六年級(jí)下冊(cè)數(shù)學(xué)人教版
- 四川大學(xué)《城市設(shè)計(jì)Ⅰ》2023-2024學(xué)年第二學(xué)期期末試卷
- 河南農(nóng)業(yè)大學(xué)《電子商務(wù)網(wǎng)絡(luò)安全》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西培賢國(guó)際職業(yè)學(xué)院《試驗(yàn)設(shè)計(jì)與分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南涉外經(jīng)濟(jì)學(xué)院《畢業(yè)設(shè)計(jì)展示》2023-2024學(xué)年第二學(xué)期期末試卷
- 三方公司合作協(xié)議書范本
- 護(hù)理責(zé)任組長(zhǎng)續(xù)聘競(jìng)聘
- 2024-2025學(xué)年第二學(xué)期教學(xué)教研工作安排表
- 2025年貴州云上產(chǎn)業(yè)服務(wù)有限公司招聘筆試參考題庫含答案解析
- 2025-2030年中國(guó)天然氣行業(yè)發(fā)展分析及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 《雷達(dá)信號(hào)處理基礎(chǔ)》課件
- 外研版(三起)小學(xué)英語三年級(jí)下冊(cè)Unit 1 Animal friends Get ready start up 課件
- (新版)廣電全媒體運(yùn)營(yíng)師資格認(rèn)證考試復(fù)習(xí)題庫(含答案)
- 《公路建設(shè)項(xiàng)目文件管理規(guī)程》
- 春節(jié)文化研究手冊(cè)
- 簡(jiǎn)單娛樂yy頻道設(shè)計(jì)模板
評(píng)論
0/150
提交評(píng)論