
課程咨詢: 400-996-5531 / 投訴建議: 400-111-8989
認(rèn)真做教育 專心促就業(yè)
1. 說說mvc模式的原理,它在android中的運(yùn)用:
答:android的官方建議應(yīng)用程序的開發(fā)采用mvc模式。何謂mvc?
mvc是model,view,controller的縮寫,mvc包含三個(gè)部分:
1)模型(model)對象:是應(yīng)用程序的主體部分,所有的業(yè)務(wù)邏輯都應(yīng)該寫在該層。
2)視圖(view)對象:是應(yīng)用程序中負(fù)責(zé)生成用戶界面的部分。也是在整個(gè)mvc架構(gòu)中用戶唯一可以看到的一層,接收用戶的輸入,顯示處理結(jié)果。
3)控制器(control)對象:是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示及更新model對象狀態(tài)的部分,控制器更重要的一種導(dǎo)航功能,想用用戶出發(fā)的相關(guān)事件,交給m哦得了處理。
android鼓勵(lì)弱耦合和組件的重用,在android中mvc的具體體現(xiàn)如下:
1)視圖層(view):一般采用xml文件進(jìn)行界面的描述,使用的時(shí)候可以非常方便的引入,當(dāng)然,如何你對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):對數(shù)據(jù)庫的操作、對網(wǎng)絡(luò)等的操作都應(yīng)該在model里面處理,當(dāng)然對業(yè)務(wù)計(jì)算等操作也是必須放在的該層的。
2. Android的五種數(shù)據(jù)存儲(chǔ)方式
答:sharedPreferences;文件;SQLite;contentProvider;網(wǎng)絡(luò)
3. 系統(tǒng)上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?請說明原由:
答:通過直接發(fā)送Uri把參過去,或者通過manifest里的intentfilter里的data屬性。代碼如下:
Intent intent = new Intent();
Intent.setAction(“android.intent.action.View”);
Uri uriBrowsers = Uri.parse(“#”);
Intent.setData(uriBrowsers);
//包名、要打開的activit
intent.setClassName(“com.android.browser”,”com.android.browser.BrowserActivity”);
startActivity(intent);
4. NDK是什么:
答:NDK是一系列工具的集合
NDK提供了一系列的工具,幫助開發(fā)者迅速的開發(fā)C/C++的動(dòng)態(tài)庫,并能自動(dòng)將so和java應(yīng)用打成apk包
NDK集成了交叉編譯器,并提供了相應(yīng)的mk文件和隔離cpu,平臺(tái)等的差異,開發(fā)人員只需簡單的修改mk文件就可以。
5. android view,surfaceview,glsurfaceview的區(qū)別:
答:SurfaceView是從View基類中派生出來的顯示類,直接子類有GLSurfaceView和VideoView,可以看出GL和視頻播放以及Camera攝像頭一般均使用SurfaceView
SurfaceView和View最本質(zhì)的區(qū)別在于,surfaceView是在一個(gè)新起的單獨(dú)線程中可以重新繪制畫面而View必須在UI的主線程中更新畫面。 那么在UI的主線程中更新畫面 可能會(huì)引發(fā)問題,比如你更新畫面的時(shí)間過長,那么你的主UI線程會(huì)被你正在畫的函數(shù)阻塞。那么將無法響應(yīng)按鍵,觸屏等消息。
當(dāng)使用surfaceView 由于是在新的線程中更新畫面所以不會(huì)阻塞你的UI主線程。但這也帶來了另外一個(gè)問題,就是事件同步。比如你觸屏了一下,你需要surfaceView中thread處理,一般就需要有一個(gè)event queue的設(shè)計(jì)來保存touch event,這會(huì)稍稍復(fù)雜一點(diǎn),因?yàn)樯婕暗骄€程同步。 所以基于以上,根據(jù)游戲特點(diǎn),一般分成兩類。
被動(dòng)更新畫面的。比如棋類,這種用view就好了。因?yàn)楫嬅娴母率且蕾囉?onTouch 來更新,可以直接使用 invalidate。 因?yàn)檫@種情況下,這一次Touch和下一次的Touch需要的時(shí)間比較長些,不會(huì)產(chǎn)生影響。
主動(dòng)更新。比如一個(gè)人在一直跑動(dòng)。這就需要一個(gè)單獨(dú)的thread不停的重繪人的狀態(tài),避免阻塞main UI thread。所以顯然view不合適,需要surfaceView來控制。
6. DDMS和TraceView的區(qū)別?
答:DDMS是一個(gè)程序執(zhí)行查看器,在里面可以看見線程和堆棧等信息,TraceView是程序性能分析器
7. 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è)概念。
希望以上達(dá)內(nèi)總結(jié)的題型對你的安卓培訓(xùn)學(xué)習(xí)有所幫助。
【免責(zé)聲明】本文部分系轉(zhuǎn)載,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問題,請?jiān)?0日內(nèi)與聯(lián)系我們,我們會(huì)予以更改或刪除相關(guān)文章,以保證您的權(quán)益!