android面試題整理
android面試中,面試官會(huì)問哪些問題呢?你都準(zhǔn)備好了嗎?了解面試題目很有必要,以下是小編幫你們整理的android面試題整理,一起來學(xué)習(xí)啦。
android面試題整理篇一
1. 請(qǐng)介紹下android的數(shù)據(jù)存儲(chǔ)方式。
SharedPreferences方式
用來存儲(chǔ)”key-value paires”格式的數(shù)據(jù),它是一個(gè)輕量級(jí)的鍵值存儲(chǔ)機(jī)制,只可以存儲(chǔ)基本數(shù)據(jù)類型,可以通過它保存一些上次用戶所做的修改操作
文件存儲(chǔ)方式
它通過FileInputStream和FileOutputStream對(duì)文件進(jìn)行操作。但是在Android中,文件是一個(gè)應(yīng)用程序私有的,一個(gè)應(yīng)用程序無法讀寫其他應(yīng)用程序的文件,如果要共享數(shù)據(jù)就用Content Providers
SQLite數(shù)據(jù)庫方式
Android提供的一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)庫,支持SQL語句
內(nèi)容提供器(Content provider)方式
是所有應(yīng)用程序之間數(shù)據(jù)存儲(chǔ)和檢索的橋梁,它的作用是使得各個(gè)應(yīng)用程序之間實(shí)現(xiàn)數(shù)據(jù)共享
網(wǎng)絡(luò)存儲(chǔ)方式
通過網(wǎng)絡(luò)來存儲(chǔ)和獲取數(shù)據(jù)
2.請(qǐng)介紹下ContentProvider是如何實(shí)現(xiàn)數(shù)據(jù)共享的。
Android提供了ContentProvider,一個(gè)程序可以通過實(shí)現(xiàn)一個(gè)ContentProvider的抽象接口將自己的數(shù)據(jù)完全暴露出去,而且ContentProviders是以類似數(shù)據(jù)庫中表的方式將數(shù)據(jù)暴露,也就是說ContentProvider就像一個(gè)“數(shù)據(jù)庫”。那么外界獲取其提供的數(shù)據(jù),也就應(yīng)該與從數(shù)據(jù)庫中獲取數(shù)據(jù)的操作基本一樣,只不過是采用URI來表示外界需要訪問的“數(shù)據(jù)庫”。外部訪問通過ContentResolver去訪問并操作這些被暴露的數(shù)據(jù)。
3.如何啟用Service,如何停用Service。
Intent intent = new Intent();
intent.setClass(this,cba.class);
startService(intent);
stopService(intent);
4. 請(qǐng)解釋下在單線程模型中Message,Handler,Message Queue,Looper之間的關(guān)系。
Message
Message消息,理解為線程間交流的信息,處理數(shù)據(jù)后臺(tái)線程需要更新UI,則發(fā)送Message內(nèi)含一些數(shù)據(jù)給UI線程。
Handler
Handler處理者,是Message的主要處理者,負(fù)責(zé)Message的發(fā)送,Message內(nèi)容的執(zhí)行處理。后臺(tái)線程就是通過傳進(jìn)來的 Handler對(duì)象引用來sendMessage(Message)。而使用Handler,需要implement 該類的 handleMessage(Message)方法,它是處理這些Message的操作內(nèi)容,例如Update UI。通常需要子類化Handler來實(shí)現(xiàn)handleMessage方法。
Message Queue
Message Queue消息隊(duì)列,用來存放通過Handler發(fā)布的消息,按照先進(jìn)先出執(zhí)行。 每個(gè)message queue都會(huì)有一個(gè)對(duì)應(yīng)的Handler。Handler會(huì)向message queue通過兩種方法發(fā)送消息:sendMessage或post。這兩種消息都會(huì)插在message queue隊(duì)尾并按先進(jìn)先出執(zhí)行。但通過這兩種方法發(fā)送的消息執(zhí)行的方式略有不同:通過sendMessage發(fā)送的是一個(gè)message對(duì)象,會(huì)被 Handler的handleMessage()函數(shù)處理;而通過post方法發(fā)送的是一個(gè)runnable對(duì)象,則會(huì)自己執(zhí)行。
Looper
Looper是每條線程里的Message Queue的管家。Android沒有Global的Message Queue,而Android會(huì)自動(dòng)替主線程(UI線程)建立Message Queue,但在子線程里并沒有建立Message Queue。所以調(diào)用Looper.getMainLooper()得到的主線程的Looper不為NULL,但調(diào)用Looper.myLooper() 得到當(dāng)前線程的Looper就有可能為NULL。
5.請(qǐng)解釋下Android程序運(yùn)行時(shí)權(quán)限與文件系統(tǒng)權(quán)限的區(qū)別。
Android程序運(yùn)行 是虛擬機(jī)Dalvik( android授權(quán))
文件系統(tǒng) 是 linux 內(nèi)核 授權(quán)
android面試題整理篇二
1、 有一個(gè)一維整型數(shù)組int[] data保存的是一張寬為width,高為height的圖片像素值信息。請(qǐng)寫一個(gè)算法,將該圖片所有的白色不透明(0xffffffff)像素點(diǎn)的透明度調(diào)整為50%。
答:像素?cái)?shù)組int[]data里就是一個(gè)個(gè)像素的顏色值,你循環(huán)和0xffffffff比較,如果相等,那么就把這個(gè)值換成0x88ffffff就行了,這樣像素?cái)?shù)組里所有的白色不透明(0xffffffff)都變成的半透明
2、 你如何評(píng)價(jià)Android系統(tǒng)?優(yōu)缺點(diǎn)。
優(yōu)點(diǎn):開源特性,得到眾多廠商支持。
軟件發(fā)展很快。
界面UI,系統(tǒng)優(yōu)化不錯(cuò)。
缺點(diǎn):版本過多,升級(jí)過快。
用戶體驗(yàn)不一致。
3、android中的動(dòng)畫有哪幾類,他們的特點(diǎn)和區(qū)別是什么?
兩種,
一種是Tween動(dòng)畫(補(bǔ)間動(dòng)畫),
一種是Frame動(dòng)畫(逐幀動(dòng)畫)。
Tween動(dòng)畫:使試圖組件移動(dòng),放大,縮小以及產(chǎn)生透明度的變化。
Frame動(dòng)畫:傳統(tǒng)的動(dòng)畫方法,通過順序的播放排列好的圖片來實(shí)現(xiàn),類似電影。
4、橫豎屏切換時(shí)activity的生命周期
不設(shè)置Activity的android:configChanges時(shí),切屏?xí)匦抡{(diào)用各個(gè)生命周期,切橫屏?xí)r會(huì)執(zhí)行一次,切豎屏?xí)r會(huì)執(zhí)行兩次。
設(shè)置Activity的android:configChanges="orientation"時(shí),切橫,豎屏?xí)r生命周期只會(huì)執(zhí)行一次。
設(shè)置Activity的android:configChanges="orientation|keyboardHidden"時(shí),切屏不會(huì)重新調(diào)用聲明周期,只會(huì)執(zhí)行onConfigurationChanged方法。
進(jìn)程與線程
當(dāng)一個(gè)程序開始運(yùn)行時(shí),它就是一個(gè)進(jìn)程,進(jìn)程包含運(yùn)行中的程序和程序所使用的內(nèi)存和系統(tǒng)資源。而一個(gè)進(jìn)程又是由多個(gè)線程組成的。引入線程優(yōu)點(diǎn)是易于調(diào)度,提供開發(fā)效率,通過線程可以方便有效的實(shí)現(xiàn)并發(fā),進(jìn)程可創(chuàng)建多個(gè)線程來執(zhí)行同一個(gè)程序的不同部分,開銷小,創(chuàng)建線程比創(chuàng)建進(jìn)程要快,所需開銷很少。
android面試題整理篇三
1、 Android dvm的進(jìn)程和Linux的進(jìn)程, 應(yīng)用程序的進(jìn)程是否為同一個(gè)概念
DVM指dalivk的虛擬機(jī)。每一個(gè)Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例。而每一個(gè)DVM都是在Linux 中的一個(gè)進(jìn)程,所以說可以認(rèn)為是同一個(gè)概念。
2、sim卡的EF 文件有何作用
sim卡的文件系統(tǒng)有自己規(guī)范,主要是為了和手機(jī)通訊,sim本 身可以有自己的操作系統(tǒng),EF就是作存儲(chǔ)并和手機(jī)通訊用的
3、嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種, 各有何特性
頁式,段式,段頁,用到了MMU,虛擬空間等技術(shù)
4、 什么是嵌入式實(shí)時(shí)操作系統(tǒng), Android 操作系統(tǒng)屬于實(shí)時(shí)操作系統(tǒng)嗎?
嵌入式實(shí)時(shí)操作系統(tǒng)是指當(dāng)外界事件或數(shù)據(jù)產(chǎn)生時(shí),能夠接受并以足夠快的速度予以處理,其處理的結(jié)果又能在規(guī)定的時(shí)間之內(nèi)來控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)作出快速響應(yīng),并控制所有實(shí)時(shí)任務(wù)協(xié)調(diào)一致運(yùn)行的嵌入式操作系統(tǒng)。主要用于工業(yè)控制、軍事設(shè)備、航空航天等領(lǐng)域?qū)ο到y(tǒng)的響應(yīng)時(shí)間有苛刻的要求,這就需要使用實(shí)時(shí)系統(tǒng)。又可分為軟實(shí)時(shí)和硬實(shí)時(shí)兩種,而android是基于linux內(nèi)核的,因此屬于軟實(shí)時(shí)。
5、一條最長的短信息約占多少byte?
中文70(包括標(biāo)點(diǎn)),英文160,160個(gè)字節(jié)。
6、 android中的動(dòng)畫有哪幾類,它們的特點(diǎn)和區(qū)別是什么?
兩種,一種是Tween動(dòng)畫、還有一種是Frame動(dòng)畫。Tween動(dòng)畫,這種實(shí)現(xiàn)方式可以使視圖組件移動(dòng)、放大、縮小以及產(chǎn)生透明度的變化;另一種Frame動(dòng)畫,傳統(tǒng)的動(dòng)畫方法,通過順序的播放排列好的圖片來實(shí)現(xiàn),類似電影。
7、handler機(jī)制的原理
andriod提供了 Handler 和 Looper 來滿足線程間的通信。Handler 先進(jìn)先出原則。Looper類用來管理特定線程內(nèi)對(duì)象之間的消息交換(Message Exchange)。
1)Looper: 一個(gè)線程可以產(chǎn)生一個(gè)Looper對(duì)象,由它來管理此線程里的Message Queue(消息隊(duì)列)。
2)Handler: 你可以構(gòu)造Handler對(duì)象來與Looper溝通,以便push新消息到Message Queue里;或者接收Looper從Message Queue取出)所送來的消息。
3) Message Queue(消息隊(duì)列):用來存放線程放入的消息。
4)線程:UI thread 通常就是main thread,而Android啟動(dòng)程序時(shí)會(huì)替它建立一個(gè)Message Queue。
8、說說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)該寫在該層。
l視圖(view)對(duì)象:是應(yīng)用程序中負(fù)責(zé)生成用戶界面的部分。也是在整個(gè)mvc架構(gòu)中用戶唯一可以看到的一層,接收用戶的輸入,顯示處理結(jié)果。
l控制器(control)對(duì)象:是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示及更新model對(duì)象狀態(tài)的部分,控制器更重要的一種導(dǎo)航功能,想用用戶出發(fā)的相關(guān)事件,交給m哦得了處理。
android鼓勵(lì)弱耦合和組件的重用,在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的控制層的重任通常落在了眾多的acitvity的肩上,這句話也就暗含了不要在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ì)算等操作也是必須放在的該層的。
看了“android面試題整理”的人還看過:
1.
2.
3.
4.
5.