Android面試題(葵花寶典)_第1頁
Android面試題(葵花寶典)_第2頁
Android面試題(葵花寶典)_第3頁
Android面試題(葵花寶典)_第4頁
Android面試題(葵花寶典)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

Android面試題葵花寶典Android開發(fā)組android的四大組件本質(zhì)上就是為了實現(xiàn)移動或者說嵌入式設(shè)備上的MVC架構(gòu),它們之間有時候是一種相互依存的關(guān)系,有時候又是一種補充關(guān)系,引入廣播機制可以便利幾大組件的信息和數(shù)據(jù)交互。b:程序間互通消息(例如在自己的應(yīng)用程序內(nèi)監(jiān)聽系統(tǒng)來電)c:效率上(參考UDP的廣播協(xié)議在局域網(wǎng)的便利性)d:設(shè)計模式上(反轉(zhuǎn)限制的一種應(yīng)用,類似監(jiān)聽者模式)請談一下Android系統(tǒng)的架構(gòu)Android系統(tǒng)采納了分層架構(gòu),從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運行庫層和linux核心層View,surfaceView,GLSurfaceView有什么區(qū)分。view是最基礎(chǔ)的,必需在UI主線程內(nèi)更新畫面,速度較慢。SurfaceView是view的子類,類似運用雙緩機制,在新的線程中更新畫面所以刷新界面速度比view快GLSurfaceView是SurfaceView的子類,opengl專用的Adapter有什么作用常見的Adapter有哪些Adapter是連接后端數(shù)據(jù)和前端顯示的適配器接口。常見的Adapter有ArrayAdapter,BaseAdapter,CursorAdapter,HeaderViewListAdapter,ListAdapter,ResourceCursorAdapter,SimpleAdapter,SimpleCursorAdapter,SpinnerAdapter,WrapperListAdapter等24、24、Manifest.xml文件中主要包括哪些信息manifest:根節(jié)點,描述了package中全部的內(nèi)容。uses-permission:懇求你的package正常運作所需給予的平安許可。permission:聲明白平安許可來限制哪些程序能你package中的組件和功能。instrumentation:聲明白用來測試此package或其他package指令組件的代碼。application:包含package中application級別組件聲明的根節(jié)點。activity:Activity是用來與用戶交互的主要工具。receiver:IntentReceiver能使的application獲得數(shù)據(jù)的變更或者發(fā)生的操作,即使它當(dāng)前不在運行。service:Service是能在后臺運行隨意時間的組件。provider:ContentProvider是用來管理長久化數(shù)據(jù)并發(fā)布給其他應(yīng)用程序運用的組件。一條最長的短信息約占多少byte中文70(包括標(biāo)點),英文160,160個字節(jié)。26、26、如何啟用Service,如何停用Service?.第一種是通過調(diào)用Context.startService()啟動,調(diào)用Context.stopService()結(jié)束,startService()可以傳遞參數(shù)給Service.其次種方式是通過調(diào)用Context.bindService()啟動,調(diào)用Context,unbindservice()結(jié)束,還可以通過ServiceConnection訪問Service。在Service每一次的開啟關(guān)閉過程中,只有onStart可被多次調(diào)用(通過多次startService調(diào)用),其他onCreate,onBind,onUnbind,onDestory在一個生命周期中只能被調(diào)用一次。注冊廣播有幾種方式,這些方式有何優(yōu)缺點android中,不同進程之間傳遞信息要用到廣播,可以有兩種方式來實現(xiàn)。第一種方式:在Manifest.xml中注冊廣播,是一種比較舉薦的方法,因為它不須要手動注銷廣播其次種方式,干脆在代碼中實現(xiàn),但須要手動注冊注銷注冊的方法有兩種,一種是靜態(tài)注冊,一種是動態(tài)注冊。動態(tài)注冊優(yōu)點:在Android的廣播機制中,動態(tài)注冊的優(yōu)先級是要高于靜態(tài)注冊優(yōu)先級的,因此在必要的狀況下,我們是須要動態(tài)注冊廣播接收器的。靜態(tài)注冊優(yōu)點:動態(tài)注冊廣播接收器還有一個特點,就是當(dāng)用來注冊的Activity關(guān)掉后,廣播也就失效了。同時反映了靜態(tài)注冊的一個優(yōu)勢,就是無需擔(dān)憂廣播接收器是否被關(guān)閉,只要設(shè)備是開啟狀態(tài),廣播接收器就是打開著的。如何優(yōu)化ListView4種activity的啟動模式standard:標(biāo)準(zhǔn)模式,一調(diào)用startActivity()方法就會產(chǎn)生一個新的實例。singleTop:假如已經(jīng)有一個實例位于Activity棧的頂部時,就不產(chǎn)生新的實例,而只是調(diào)用Activity中的newlnstance()方法。假如不位于棧頂,會產(chǎn)生一個新的實例。singleTask:會在一個新的task中產(chǎn)生這個實例,以后每次調(diào)用都會運用這個,不會去產(chǎn)生新的實例了。singlelnstance:這個跟singleTask基本上是一樣,只有一個區(qū)分:在這個模式下的Activity實例所處的task中,只能有這個activity實例,不能有其他的實例android中線程與線程,進程與進程之間如何通信1、一個Android程序起先運行時,會單獨啟動一個Process。默認(rèn)狀況下,全部這個程序中的Activity或者Service都會跑在這個Process。默認(rèn)狀況下,一個Android程序也只有一個Process,但一個Process下卻可以有很多個Thread。2、一個Android程序起先運行時,就有一個主線程MainThread被創(chuàng)建。該線程主要負(fù)責(zé)UI界面的顯示、更新和控件交互,所以又叫UIThread。一個Android程序創(chuàng)建之初,一個Process呈現(xiàn)的是單線程模型一即MainThread,全部的任務(wù)都在一個線程中運行。所以,MainThread所調(diào)用的每一個函數(shù),其耗時應(yīng)當(dāng)越短越好。而對于比較費時的工作,應(yīng)當(dāng)設(shè)法交給子線程去做,以避開堵塞主線程(主線程被堵塞,會導(dǎo)致程序假死現(xiàn)象)。3、Android單線程模型:AndroidUI操作并不是線程平安的并且這些操作必需在UI線程中執(zhí)行。假如在子線程中干脆修改UI,會導(dǎo)致異樣。Android四大組件是什么?Android四大基本組件分別是Activity>Service>ContentProvider、BroadcastReceivero1、Activity:應(yīng)用程序中,一個Activity通常就是一個單獨的屏幕,它上面可以顯示一些控件也可以監(jiān)聽并處理用戶的事務(wù)做出響應(yīng)。Activity之間通過Intent進行通信。在Intent的描述結(jié)構(gòu)中,有兩個最重要的部分:動作和動作對應(yīng)的數(shù)據(jù)。2、Service,Service是android系統(tǒng)中的一種組件,它跟Activity的級別差不多,但是他不能自己運行,只能后臺運行,并且可以和其他組件進行交互。Service是沒有界面的長生命周期的代碼。Service是一種程序,它可以運行很長時間,但是它卻沒有用戶界面3、ContentProvider是Android供應(yīng)的第三方應(yīng)用數(shù)據(jù)的訪問方案。4、BroadcastReceive廣播接收器,在Android中,Broadcast是一種廣泛運用的在應(yīng)用程序之間傳輸信息的機制。而BroadenstReceiver是對發(fā)送出來的Broadcast進行過濾接受并響應(yīng)的一類組件??梢赃\用BroadcastReceiver來讓應(yīng)用對一個外部的事務(wù)做出響應(yīng)。Android中對View的更新有幾種方式多線程和雙緩沖的運用狀況?Android中對View的更新有很多種方式,運用時要區(qū)分不同的應(yīng)用場合。最要緊的是分清:多線程和雙緩沖的運用狀況。.不運用多線程和雙緩沖:這種狀況最簡潔了,一般只是希望在View發(fā)生變更時對UI進行重繪。你只需在Activity中顯式地調(diào)用View對象中的invalidate。方法即可。系統(tǒng)會自動調(diào)用View的onDraw()方法。.運用多線程和不運用雙緩沖:這種狀況須要開啟新的線程,新

開的線程就不好訪問View對象了。.運用多線程和雙緩沖:Android中SurfaceView是View的子類,她同時也實現(xiàn)了雙緩沖搜尋Android多線程處理的機制Handler可以發(fā)送Messsage和Runnable對象到與其相關(guān)聯(lián)的線程的消息隊列。每個Handler對象與創(chuàng)建它的線程相關(guān)聯(lián),并且每個Handler對象只能與一個線程相關(guān)聯(lián)。Handler一般有兩種用途:1、執(zhí)行安排任務(wù),你可以再預(yù)定的實現(xiàn)執(zhí)行某些任務(wù),可以模擬定時器。2、線程間通信。在Android的應(yīng)用啟動時,會創(chuàng)建一個主線程,主線程會創(chuàng)建一個消息隊列來處理各種消息。當(dāng)你創(chuàng)建子線程時,你可以再你的子線程中拿到父線程中創(chuàng)建的Handler對象,就可以通過該對象向父線程的消息隊列發(fā)送消息Androiddvm的進程和Linux的進程,應(yīng)用程序的進程是否為同一個概念?DVM指dalivk的虛擬機。每一個Android應(yīng)用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。而每一個DVM都是在Linux中的一個進程,所以說可以認(rèn)為是同一個概念。35^如何退出35^如何退出Activity?對于單一Activity的應(yīng)用來說,退出很簡潔,干脆finish。即可。當(dāng)然,也可以用killProcess()和System.exit()這樣的方法?,F(xiàn)供應(yīng)幾個方法,供參考:1、拋異樣強制退出:該方法通過拋異樣,使程序ForceClose。驗證可以,但是,須要解決的問題是,如何使程序結(jié)束掉,而不彈出ForceClose的窗口。2、記錄打開的Activity:每打開一個Activity,就記錄下來。在須要退出時,關(guān)閉每一個Activity即可。3、發(fā)送特定廣播:在須要結(jié)束應(yīng)用時,發(fā)送一個特定的廣播,每個Activity收到廣播后,關(guān)閉即可。4、遞歸退出在打開新的Activity時運用startActivityForResult,然后自己加標(biāo)記,在onActivityResult中處理,遞歸關(guān)閉。除了第一個,都是想方法把每一個Activity都結(jié)束掉,間接達到目的。但是這樣做同樣不完備。你會發(fā)覺,假如自己的應(yīng)用程序?qū)γ恳粋€Activity都設(shè)置了nosensor,在兩個Activity結(jié)束的間隙,sensor可能有效了。但至少,我們的目的達到了,而且沒有影響用戶運用。為了編程便利,最好定義一個Activity基類,處理這些共通問題36、簡要說說AsyncTask在開發(fā)Android移動客戶端的時候往往要運用多線程來進行操作,我們通常會將耗時的操作放在單獨的線程執(zhí)行,避開其占用主線程而給用戶帶來不好的用戶體驗。但是在子線程中無法去操作主線程(UI線程),在子線程中操作UI線程會出現(xiàn)錯誤。因此android供應(yīng)了一個類Handler來在子線程中來更新UI線程,用發(fā)消息的機制更新UI界面,呈現(xiàn)給用戶。這樣就解決了子線程更新UI的問題。但是費時的任務(wù)操作總會啟動一些匿名的子線程,太多的子線程給系統(tǒng)帶來巨大的負(fù)擔(dān),隨之帶來一些性能問題。因此android供應(yīng)了一個工具類AsyncTask,顧名思義異步執(zhí)行任務(wù)。這個AsyncTask生來就是處理一些后臺的比較耗時的任務(wù),給用戶帶來良好用戶體驗的,從編程的語法上顯得優(yōu)雅了很多,不再須要子線程和Handler就可以完成異步操作并且刷新用戶界面1、請描述下Activity的生命周期Activity的生命周期與activity的活動狀態(tài)親密相關(guān),也和activity的周期函數(shù)親密相關(guān)共有七個周期函數(shù)與生命周期執(zhí)行依次如下:onCreate() >onStart() >onRestart() >onResume() >onPause() >onStop() >onDestroy()2、假如后臺的Activity由于某緣由被系統(tǒng)回收了,如何在被系統(tǒng)回收之前保存當(dāng)前狀態(tài)當(dāng)你的程序中某一個ActivityA在運行時,主動或被動地運行另一個新的ActivityB,這個時候A會執(zhí)行onSaveInstanceState()。B完成以后又會來找A,這個時候就有兩種狀況:一是A被回收,二是A沒有被回收,被回收的A就要重新調(diào)用onCreate()方法,不同于干脆啟動的是這回onCreate()里是帶上了參數(shù)savedlnstanceState;而沒被收回的就干脆執(zhí)行onResume(),跳過onCreate()了3、如何將一個Activity設(shè)置成窗口的樣式在AndroidManifest.xml中定義Activity的地方一句話android:theme=,,@android:style/Theme.Dialog” 或android:theme=,,@android:style/Theme.Translucent”就變成半透亮的4、如何退出Activity如何平安退出已調(diào)用多個Activity的Application對于單一Activity的應(yīng)用來說,退出很簡潔,干脆finish。即可。當(dāng)然,也可以用killProcess()和System,exit()這樣的方法。5、請介紹下Android中常用的五種布局在Android中,共有五種布局方式,分別是:FrameLayout(框架布局),LinearLayout(線性布局),AbsoluteLayout(肯定布局),RelativeLayout(相對布局),TableLayout(表格布局)。1、FrameLayout框架布局,放入其中的全部元素都被放置在最左上的區(qū)域,而且無法為這些元素指定一個準(zhǔn)確的位置,下一個子元素會重疊覆蓋上一個子元素,適合閱讀單張圖片。2、LinearLayout線性布局,是應(yīng)用程序中最常用的布局方式,主要供應(yīng)控件水平或者垂直排列的模型,每個子組件都是以垂直或水平的方式來定位.(默認(rèn)是垂直)3、AbsoluteLayout肯定定位布局,采納坐標(biāo)軸的方式定位組件,左上角是(0,0)點,往右x軸遞增,往下Y軸遞增,組件定位屬性為android:layout_x和android:layout_y來確定坐標(biāo)。4、RelativeLayout相對布局,依據(jù)另外一個組件或是頂層父組件來確定下一個組件的位置。和css里面的類似。5>TableLayout表格布局,類似Html里的Table.運用TableRow來布局,其中TableRow代表一行,TableRow的每一個視圖組件代表一個單元格。6、請介紹下Android的數(shù)據(jù)存儲方式?1、SharedPreferences方式2、文件存儲方式3、SQLite數(shù)據(jù)庫方式4、內(nèi)容供應(yīng)器(Contentprovider)方式5、網(wǎng)絡(luò)存儲方式7、請介紹下ContentProvider是如何實現(xiàn)數(shù)據(jù)共享的創(chuàng)建一個屬于你自己的Contentprovider或者將你的數(shù)據(jù)添加到一個已經(jīng)存在的Contentprovider中,前提是有相同數(shù)據(jù)類型并且有寫入Contentprovider的權(quán)限8、android中的動畫有哪幾類,它們的特點和區(qū)分是什么兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現(xiàn)方式可以使視圖組件移動、放大、縮小以與產(chǎn)生透亮度的變更;另一種Frame動畫,傳統(tǒng)的動畫方法,通過依次的播放排列好的圖片來實現(xiàn),類似電影。9、Handler機制的原理andriod供應(yīng)了Handler和Looper來滿意線程間的通信。Handler先進先出原則。Looper類用來管理特定線程內(nèi)對象之間的消息交換(MessageExchange)o1>Looper:一個線程可以產(chǎn)生一個Looper對象,由它來管理此線程里的MessageQueue(消息隊列)。2、Handler:你可以構(gòu)造Handler對象來與Looper溝通,以便push新消息到MessageQueue里;或者接收Looper從MessageQueue取出)所送來的消息。3、MessageQueue(消息隊列):用來存放線程放入的消息。4、線程:UIthread通常就是mainthread,而Android啟動程序時會替它建立一個MessageQueueo如何讓Activity變成一個窗口?只須要設(shè)置一下Activity的主題就可以了在AndroidManifest.xml中定義Activity的地方一句話,設(shè)置如下:android:theme="?android:style/Theme.Dialognandroid:theme=,,?android:style/Theme.Dialog”請說明下在單線程模型中Message>Handler>MessageQueue>Looper之間的關(guān)系。簡潔的說,Handler獲得當(dāng)前線程中的looper對象,looper用來從存放Message的MessageQueue中取出Message,再有Handler進行Message的分發(fā)和處理AIDL的全稱是什么如何工作能處理哪些類型的數(shù)據(jù)AIDL全稱AndroidInterfaceDefinitionLanguage(AndRoid接口描述語言)是一種借口描述語言。編譯器可以通過aidl文件生成一段代碼,通過預(yù)先定義的接口達到兩個進程內(nèi)部通信進程跨界對象訪問的目的.AIDL的IPC的機制和COM或C0RBA類似,是基于接口的,但它是輕量級的。它運用代理類在客戶端和實現(xiàn)層間傳遞值.假如要運用AIDL,須要完成2件事情:L引入AIDL的相關(guān)類.;2.調(diào)用aidl產(chǎn)生的class.理論上,參數(shù)可以傳遞基本數(shù)據(jù)類型和String,還有就是Bundle的派生類,請說明下Android程序運行時權(quán)限與文件系統(tǒng)權(quán)限的區(qū)分apk程序是運行在虛擬機上的,對應(yīng)的是Android獨特的權(quán)限機制,只有體現(xiàn)到文件系統(tǒng)上時才運用linux的權(quán)限設(shè)置。android系統(tǒng)有的權(quán)限是基于簽名的什么是ANR如何避開它ANR:ApplicationNotResponding,五秒在Android中,活動管理器和窗口管理器這兩個系統(tǒng)服務(wù)負(fù)責(zé)監(jiān)視應(yīng)用程序的響應(yīng)。當(dāng)出現(xiàn)下列狀況時,Android就會顯示ANR對話框了:對輸入事務(wù)(如按鍵、觸摸屏事務(wù))的響應(yīng)超過5秒意向接受器(intentReceiver)超過10秒鐘仍未執(zhí)行完畢Android應(yīng)用程序完全運行在一個獨立的線程中(例如main)o這就意味著,任何在主線程中運行的,須要消耗大量時間的操作都會引發(fā)ANR。因為此時,你的應(yīng)用程序已經(jīng)沒有機會去響應(yīng)輸入事務(wù)和意向廣播(Intentbroadcast)o因此,任何運行在主線程中的方法,都要盡可能的只做少量的工作。特殊是活動生命周期中的重要方法如onCreateO和onResume()等更應(yīng)如此。潛在的比較耗時的操作,如訪問網(wǎng)絡(luò)和數(shù)據(jù)庫;或者是開銷很大的計算,比如變更位圖的大小,須要在一個單獨的子線程中完成(或者是運用異步懇求,如數(shù)據(jù)庫操作)。但這并不意味著你的主線程須要進入堵塞狀態(tài)已等待子線程結(jié)束一也不須要調(diào)用Therad.wait()或者Thread,sleep。方法。取而代之的是,主線程為子線程供應(yīng)一個句柄(Handler),讓子線程在即將結(jié)束的時候調(diào)用它。運用這種方法涉與你的應(yīng)用程序,能夠保證你的程序?qū)斎氡3至己玫捻憫?yīng),從而避開因為輸入事務(wù)超過5秒鐘不被處理而產(chǎn)生的ANR。這種實踐須要應(yīng)用到全部顯示用戶界面的線程,因為他們都面臨著同樣的超時問題。15>Android中Activity,Intent,ContentProvider,Service各有什么區(qū)分。Activity:活動,是最基本的android應(yīng)用程序組件。一個活動就是一個單獨的屏幕,每一個活動都被實現(xiàn)為一個獨立的類,并且從活動基類繼承而來。Intent:意圖,描述應(yīng)用想干什么。最重要的部分是動作和動作對應(yīng)的數(shù)據(jù)。ContentProvider:內(nèi)容供應(yīng)器,android應(yīng)用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件、SQLite數(shù)據(jù)庫中,甚至是任何有效的設(shè)備中。當(dāng)你想將你的應(yīng)用數(shù)據(jù)和其他應(yīng)用共享時,內(nèi)容供應(yīng)器就可以發(fā)揮作用了。Service:服務(wù),具有一段較長生命周期且沒有用戶界面的程序

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論