android常見面試題以及答案_第1頁
android常見面試題以及答案_第2頁
android常見面試題以及答案_第3頁
android常見面試題以及答案_第4頁
android常見面試題以及答案_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、android 常見面試題以及答案 1.    請描述下Activity的生命周期。2.    如果后臺的Activity由于某原因被系統(tǒng)回收了,如何在被系統(tǒng)回收之前保存當前狀態(tài)?3.    如何將一個Activity設(shè)置成窗口的樣式。(Edited by Sodino)4.    如何退出Activity?如何安全退出已調(diào)用多個Activity的Application?5.    請介紹下Android中常用的五種布局。6. 

2、;   請介紹下Android的數(shù)據(jù)存儲方式。(Edited by Sodino)7.    請介紹下ContentProvider是如何實現(xiàn)數(shù)據(jù)共享的。(Edited by Sodino)8.    如何啟用Service,如何停用Service。(Edited by Sodino)9.    注冊廣播有幾種方式,這些方式有何優(yōu)缺點?請談?wù)凙ndroid引入廣播機制的用意。10.    請解釋下在單線程模型中Message、Handler、Message

3、 Queue、Looper之間的關(guān)系。11.    AIDL的全稱是什么?如何工作?能處理哪些類型的數(shù)據(jù)?12.    請解釋下Android程序運行時權(quán)限與文件系統(tǒng)權(quán)限的區(qū)別。(Edited by Sodino)13.    系統(tǒng)上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?請說明原由。14.    有一個一維整型數(shù)組intdata保存的是一張寬為width,高為height的圖片像素值信息。請寫一個算法,將該圖片所有的白色不透明(0xffffffff)像素點的透明度調(diào)

4、整為50%。15.    你如何評價Android系統(tǒng)?優(yōu)缺點。1. Android dvm的進程和Linux的進程, 應(yīng)用程序的進程是否為同一個概念DVM 執(zhí)行時,在linux看來就是一應(yīng)用程序進程,所以說是同一概念2. sim卡的EF 文件有何作用sim卡的文件系統(tǒng)有自己規(guī)范,主要是為了和手機通訊,sim本 身可以有自己的操作系統(tǒng),EF就是作存儲并和手機通訊用的4.嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種, 各有何特性頁式,段式,段頁,用到了MMU,虛擬空間等技術(shù)5. 什么是嵌入式實時操作系統(tǒng), Android 操作系統(tǒng)屬于實時操作系統(tǒng)嗎?分 硬實時和軟實時,andro

5、id屬于linux內(nèi)核,linux在用戶空間可搶占,內(nèi)核空間在2.4以后可局部搶占,嚴格來講 Android屬于軟實時系統(tǒng)6. 一條最長的短信息約占多少byte? 1、 Android dvm的進程和Linux的進程, 應(yīng)用程序的進程是否為同一個概念DVM指dalivk的虛擬機。每一個Android應(yīng)用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。而每一個DVM都是在Linux 中的一個進程,所以說可以認為是同一個概念。2、sim卡的EF 文件有何作用sim卡的文件系統(tǒng)有自己規(guī)范,主要是為了和手機通訊,sim本 身可以有自己的操作系統(tǒng),EF就是作存儲并和手機通訊

6、用的3、嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種, 各有何特性頁式,段式,段頁,用到了MMU,虛擬空間等技術(shù)4、 什么是嵌入式實時操作系統(tǒng), Android 操作系統(tǒng)屬于實時操作系統(tǒng)嗎?嵌入式實時操作系統(tǒng)是指當外界事件或數(shù)據(jù)產(chǎn)生時,能夠接受并以足夠快的速度予以處理,其處理的結(jié)果又能在規(guī)定的時間之內(nèi)來控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)作出快速響應(yīng),并控制所有實時任務(wù)協(xié)調(diào)一致運行的嵌入式操作系統(tǒng)。主要用于工業(yè)控制、軍事設(shè)備、航空航天等領(lǐng)域?qū)ο到y(tǒng)的響應(yīng)時間有苛刻的要求,這就需要使用實時系統(tǒng)。又可分為軟實時和硬實時兩種,而android是基于linux內(nèi)核的,因此屬于軟實時。5、一條最長的短信息約占多少byte?中文70

7、(包括標點),英文160,160個字節(jié)6、 android中的動畫有哪幾類,它們的特點和區(qū)別是什么?兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現(xiàn)方式可以使視圖組件移動、放大、縮小以及產(chǎn)生透明度的變化;另一種Frame動畫,傳統(tǒng)的動畫方法,通過順序的播放排列好的圖片來實現(xiàn),類似電影。7、handler機制的原理andriod提供了 Handler 和 Looper 來滿足線程間的通信。Handler 先進先出原則。Looper類用來管理特定線程內(nèi)對象之間的消息交換(Message Exchange)。1)Looper: 一個線程可以產(chǎn)生一個Looper對象,由它

8、來管理此線程里的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。8、說說mvc模式的原理,它在android中的運用MVC(Model_view_contraller)”模型_視圖_控制器”。 MVC應(yīng)用程序總是由這三

9、個部分組成。Event(事件)導致Controller改變Model或View,或者同時改變兩者。只要 Controller改變了Models的數(shù)據(jù)或者屬性,所有依賴的View都會自動更新。類似的,只要Controller改變了View,View會 從潛在的Model中獲取數(shù)據(jù)來刷新自己。一,listview你是怎么優(yōu)化的。二,view的刷新,之前說過三,IPC及原理四,Android多線程6 n; 五,Android為什么要設(shè)計4大組件,他們之間的聯(lián)系,不設(shè)計行不行(主要是為了實現(xiàn)MVC模式,然而java中最難的模式也是這個,很少有產(chǎn)品能將這個模式做得很好【Technicolor的

10、面試官問的這個】)  六,service的周期,activity的周期,談下你對Android內(nèi)部應(yīng)用的了解,比如他做電話,以及聯(lián)系人等等應(yīng)用。框架層有很多東西還是多看看,熟悉Android怎么做的,不管你做應(yīng)用程開發(fā)還是應(yīng)用框架層開發(fā)很有好處的。在就是你項目經(jīng)驗,突出你遇到什么難點,然后是怎么解決的!盡量將每個技術(shù)點凸顯出來,當然面試官有時候會為了體現(xiàn)你是否真正做過,他會問你,你在這個應(yīng)用中做那個模塊,用了多少個類之類的問題。偶爾有的面試官會問你,你用過Android自帶的單元測試了沒,怎么用的?當然我面試過很多家單位,有的是做平板,手機,數(shù)字電視,有的是做出個erp之類

11、的客戶端等等,出于前面的三個,基本上都是將Android的全部改掉,如果真正要做Android的話,大家要學的還很多??傊?,一句話,什么樣的面試官都有,去面試的時候要做好一切心理準備,不管是技術(shù)還是基礎(chǔ)都得扎實。一個人的交談能力也很重要,總之不是非常標準的普通話,最起碼你說的得讓別人聽得懂,而且得把面試官講得非常徹底,這樣你獲得offer的機會更大,談工資也有優(yōu)勢當然曾經(jīng)一家公司的面試官跟我說過,技術(shù)是不惜錢的,只要你有能力,多少錢他都請。確實,來北京求職期間,牛人真的很多,而且有的面試官也非常好,給了很多忠肯的意見。并不是每個面試官都特想為難你的最主要的還是想知道你的技術(shù),因為他們也是吃公司

12、飯,得為這個負責。View重繪和內(nèi)存泄露的好像是面試經(jīng)常問的問題 1. View的刷新: 在需要刷新的地方,使用handle.sendmessage發(fā)送信息,然后在handle的getmessage里面執(zhí)行invaliate或者postinvaliate. 2. GC內(nèi)存泄露 出現(xiàn)情況: 1.數(shù)據(jù)庫的cursor沒有關(guān)閉 2.構(gòu)造adapter時,沒有使用緩存contentview    衍生listview的優(yōu)化問題-減少創(chuàng)建view的對象,充分使用contentview,可以使用一靜態(tài)類來優(yōu)化處理ge

13、tview的過程/ 3.Bitmap對象不使用時采用recycle()釋放內(nèi)存 4.activity中的對象的生命周期大于activity 調(diào)試方法: DDMS=> HEAPSZIE=>dataobject=>Total Size 還有其他問題,大家歡迎提出阿,可以是整體架構(gòu)的,還有這個Hal層.這篇文章會涉及到以下幾個內(nèi)容一 Activity的生命周期 二 讓Activity變成一個窗口:Activity屬性設(shè)定 三 你后臺的Activity被系統(tǒng) 回收怎么辦:onSaveInstanceState 四

14、調(diào)用與被調(diào)用:我們的通信使者 - Intent一 Activity的生命周期   和其他手機 平臺 的應(yīng)用 程序 一樣,Android的應(yīng)用程序 的生命周期是被統(tǒng)一掌控 的,也    就是說我們寫的應(yīng)用程序命運掌握在別人(系統(tǒng))的手里,我們不能改變它,只能學習 并    適應(yīng)它。簡單地說一下為什么是這樣:我們手機在運行 一個應(yīng)用程序的時候,有可能打進來電話    發(fā)進來短信 ,或者沒有電了,這時候程序都會被中斷,優(yōu)先去服務(wù)電話的基本功能 ,另    外系統(tǒng)

15、也不允許你占用太多資源 ,至少要保證電話功能吧,所以資源不足的時候也就有可    能被干掉。 如何優(yōu)化Android中ListView滾動速度的方法他是讓你滾動的快點還是慢點?慢的話:   有個延遲加載數(shù)據(jù)的方法,在API的demo中。要是讓ListView滾動速度快的話,你可以這樣告訴他:  讓他的手指在屏幕上迅速的上下滑動,當他的手指移動速度達到100px/0.1秒后,就可以看到快速滑動的效果了!Android的國際化與本地化internationalization (國際化)簡稱 i18n,因為在i和n之間還有18個字

16、符,localization(本地化 ),簡稱L10n。 一般說明一個地區(qū)的語言時,用 語言_地區(qū)的形式,如  zh_CN, zh_TW.各國語言縮寫  /standards/iso639-2/php/code_list.php國家和地區(qū)簡寫 /iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.htmlandroid 對i18n和L10n提供了非常好的支持。android沒有專門的API來提供國際化,而是通過對不

17、同resource的命名來達到國際化,同時這種命名方法還可用于對硬件的區(qū)分,如不同的新視屏用不同的圖片。      在eclipse的工程中,res目錄有默認幾項resource,如 drawable, layout,menu,values其余還有res/anim/   用來放置動畫res/xml/     用來放置style theme等xml定義。res/raw/    用來放置data數(shù)據(jù) 我們引用這些resource時候,在java代碼中

18、是通過R.resource_type.resource_name的方式來使用,如setTitle(R.string.main_title);還有一種是在xml中直接引用,如<TextView      android:id ="+id/hello_view"    android:layout_width="fill_parent"     android:layout_height="wrap_content"

19、;     android:text="string/hello"    />     引用了名字為hello的字符串。當程序運行時,通過Resource類會裝載strings.xml中名字為hello的字符串。但Resource類裝載strings.xml時會根據(jù)當前手機的設(shè)置來選擇裝載哪一個xml文件。這些手機設(shè)置有MCC and MNC, Language and region, Screen dimensions, Wider/taller scree

20、ns, Screen orientation,Screen pixel density, Touchscreen type, SDK version,也就是說通過手機當前語言區(qū)域,屏幕的大小,屏幕像素,以及當前android sdk的版本號來選擇。通過把strings.xml放置在以這些選項命名的文件夾下,Resource類就能正確的裝載所需的字符串。     我們以不同的local和region來做一次國際化,首先values表示默認的字符串,也即當Resource找不到匹配的資源時,默認使用values文件夾下的資源,其余 drawable等資源也是

21、同樣的。   當命名這些文件夾的名字時,不同的選項用-分開,而且次序必須和 andorid 文檔中table文件夾的命名必須都是小寫字符,否則在一些大小敏感的文件系統(tǒng)中可能會出錯,如果你用大寫,eclipse的adt都會自動報錯。小寫字母r表示region的意思。 上圖命名了中文簡體和繁體以及默認選項,在strings.xml中除了字符串本身不一樣,xml中定義該字符串的名字,id都是一樣的。所以在代碼或者xml中引用該資源時,只要引用名字即可或者id即可,程序啟動時候Resource類回到相應(yīng)的目錄下去尋找正確的字符串(資源)  通過在Settings中設(shè)置lo

22、cale& Text 我們可以讓Resource類來選擇相應(yīng)文件夾下的內(nèi)容,選擇英語時候結(jié)果如下,也即選擇了 values下的strings.xml選擇 chinese(china)時,也即選了 values-zh-rcn目錄下的strings.xml選擇 chinese(taiwan)時,也即選了 values-zh-rtw目錄下的strings.xml 其余手機的選項,像屏幕的像素等都可以建立相應(yīng)得目錄。Android常用控件的信息!單選框(RadioButton與RadioGroup): RadioGroup用于對單選框進行分組,相同組內(nèi)的單選框只有一個單選框

23、被選中。  事件:setOnCheckedChangeListener(),處理單選框被選擇事件。把RadioGroup.OnCheckedChangeListener實例作為參數(shù)傳入。多選框(CheckBox): 每個多選框都是獨立的,可以通過迭代所有的多選框,然后根據(jù)其狀態(tài)是否被選中在獲取其值。 事件:setOnCheckChangeListener()處理多選框被選擇事件。把CompoundButton.OnCheckedChangeListener實例作為參數(shù)傳入下拉列表框(Spring): Spinner.getItemAtPosit

24、ion(Spinner.getSelectedItemPosition();獲取下拉列表框的值。 事件:setOnItemSelectedListener(),處理下拉列表框被選擇事件把AdapterView.OnItemSelectedListener實例作為參數(shù)傳入;拖動條(SeekBar): SeekBar.getProgress()獲取拖動條當前值 事件:setOnSeekBarChangeListener(),處理拖動條值變化事件,把SeekBar.OnSeekBarChangeListener實例作為參數(shù)傳入。菜單(Menu): 重寫Acti

25、vity的onCreatOptionMenu(Menu menu)方法,該方法用于創(chuàng)建選項菜單,咋用戶按下手機的"Menu"按鈕時就會顯示創(chuàng)建好的菜單,在onCreatOptionMenu(Menu Menu)方法內(nèi)部可以調(diào)用Menu.add()方法實現(xiàn)菜單的添加。 重寫Activity的onMenuItemSelected()方法,該方法用于處理菜單被選擇事件。進度對話框(ProgressDialog): 創(chuàng)建并顯示一個進度對話框:ProgressDialog.show(ProgressDialogActivity.this,"請稍等&quo

26、t;,"數(shù)據(jù)正在加載中.",true); 設(shè)置對話框的風格:setProgressStyle()  ProgressDialog.STYLE_SPINNER  旋轉(zhuǎn)進度條風格(為默認風格)  ProgressDialog.STYLE_HORIZONTAL 橫向進度條風格Android系統(tǒng)的架構(gòu)!android的系統(tǒng)架構(gòu)和其操作系統(tǒng)一樣,采用了分層的架構(gòu)。從架構(gòu)圖看,android分為四個層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運行庫層和linux核心層。1.應(yīng)用程序Android會同一系列核心應(yīng)用程序

27、包一起發(fā)布,該應(yīng)用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是使用JAVA語言編寫的。2.應(yīng)用程序框架開發(fā)人員也可以完全訪問核心應(yīng)用程序所使用的API框架。該應(yīng)用程序的架構(gòu)設(shè)計簡化了組件的重用;任何一個應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過得遵循框架的安全性限制)。同樣,該應(yīng)用程序重用機制也使用戶可以方便的替換程序組件。隱藏在每個應(yīng)用后面的是一系列的服務(wù)和系統(tǒng), 其中包括;* 豐富而又可擴展的視圖(Views),可以用來構(gòu)建應(yīng)用程序, 它包括列表(lists),網(wǎng)格(grids),文本框(te

28、xt boxes),按鈕(buttons), 甚至可嵌入的web瀏覽器。* 內(nèi)容提供器(Content Providers)使得應(yīng)用程序可以訪問另一個應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫), 或者共享它們自己的數(shù)據(jù)* 資源管理器(Resource Manager)提供 非代碼資源的訪問,如本地字符串,圖形,和布局文件( layout files )。* 通知管理器 (Notification Manager) 使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息。* 活動管理器( Activity Manager) 用來管理應(yīng)用程序生命周期并提供常用的導航回退功能。有關(guān)更多的細節(jié)和怎樣從頭寫一個應(yīng)用程序,

29、請參考 如何編寫一個 Android 應(yīng)用程序.3.系統(tǒng)運行庫1)程序庫Android 包含一些C/C+庫,這些庫能被Android系統(tǒng)中不同的組件使用。它們通過 Android 應(yīng)用程序框架為開發(fā)者提供服務(wù)。以下是一些核心庫:* 系統(tǒng) C 庫 - 一個從 BSD 繼承來的標準 C 系統(tǒng)函數(shù)庫( libc ), 它是專門為基于 embedded linux 的設(shè)備定制的。* 媒體庫 - 基于 PacketVideo OpenCORE;該庫支持多種常用的音頻、視頻格式回放和錄制,同時支持靜態(tài)圖像文件。編碼格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。* S

30、urface Manager - 對顯示子系統(tǒng)的管理,并且為多個應(yīng)用程序提 供了2D和3D圖層的無縫融合。* LibWebCore - 一個最新的web瀏覽器引擎用,支持Android瀏覽器和一個可嵌入的web視圖。* SGL - 底層的2D圖形引擎* 3D libraries - 基于OpenGL ES 1.0 APIs實現(xiàn);該庫可以使用硬件 3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。* FreeType -位圖(bitmap)和矢量(vector)字體顯示。* SQLite - 一個對于所有應(yīng)用程序可用,功能強勁的輕型關(guān)系型數(shù)據(jù)庫引擎。2)Android 運行庫Android 包括

31、了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數(shù)功能。每一個Android應(yīng)用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。Dalvik被設(shè)計成一個設(shè)備可以同時高效地運行多個虛擬系統(tǒng)。 Dalvik虛擬機執(zhí)行(.dex)的Dalvik可執(zhí)行文件,該格式文件針對小內(nèi)存使用做了優(yōu)化。同時虛擬機是基于寄存器的,所有的類都經(jīng)由JAVA編譯器編譯,然后通過SDK中 的 “dx” 工具轉(zhuǎn)化成.dex格式由虛擬機執(zhí)行。Dalvik虛擬機依賴于linux內(nèi)核的一些功能,比如線程機制和底層內(nèi)存管理機制。4.Linux 內(nèi)核 Android 的核心系統(tǒng)服務(wù)依賴于 Linu

32、x 2.6 內(nèi)核,如安全性,內(nèi)存管理,進程管理, 網(wǎng)絡(luò)協(xié)議棧和驅(qū)動模型。 Linux 內(nèi)核也同時作為硬件和軟件棧之間的抽象層。 開機自動運行程序! Android實現(xiàn)開機自動運行程序2009-12-31 15:01:17.0        開機     自動     運行     程序   有些時候,應(yīng)用需要在開機時就自動運行,例如某個自動從網(wǎng)上更新內(nèi)容的后臺serv

33、ice。怎樣實現(xiàn)開機自動運行的應(yīng)用?在撰寫本文時,聯(lián)想到高煥堂先生以“Don''t call me, I''ll call you back!”總結(jié)Android框架,真是說到點子上了。理解這句話的含義,許多有關(guān)Android平臺上實現(xiàn)某種功能的問題,都能迎刃而解。 使用場景:手機開機后,自動運行程序,在屏幕上顯示"Hello. I started!"字樣。 背景知識:當Android啟動時,會發(fā)出一個系統(tǒng)廣播,內(nèi)容為ACTION_BOOT_COMPLETED,它的字符串常量表示為ent.action

34、.BOOT_COMPLETED。只要在程序中“捕捉”到這個消息,再啟動之即可。記住,Android框架說:Don''t call me, I''ll call you back。我們要做的是做好接收這個消息的準備,而實現(xiàn)的手段就是實現(xiàn)一個BroadcastReceiver。 代碼解析: 1、界面Activity:SayHello.java package com.ghstudio.BootStartDemo; import android.app.Activity; import android.os.Bundl

35、e; import android.widget.TextView; public class SayHello extends Activity  Override public void onCreate(Bundle savedInstanceState)  super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText("Hello. I started!"); setContentView

36、(tv);   這段代碼很簡單,當Activity啟動時,創(chuàng)建一個TextView,用它顯示"Hello. I started!"字樣。 2、接收廣播消息:BootBroadcastReceiver.java package com.ghstudio.BootStartDemo; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; 

37、; public class BootBroadcastReceiver extends BroadcastReceiver  static final String ACTION = "ent.action.BOOT_COMPLETED" Override public void onReceive(Context context, Intent intent)  if (intent.getAction().equals(ACTION) Intent sayHelloIntent=new

38、Intent(context,SayHello.class); sayHelloIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(sayHelloIntent);    該類派生自BroadcastReceiver,覆載方法onReceive中,檢測接收到的Intent是否符合BOOT_COMPLETED,如果符合,則啟動SayHello那個Activity。 3、配置文件:AndroidManifest.xml <?x

39、ml version="1.0" encoding="utf-8"?> <manifest xmlns:android=" package="com.ghstudio.BootStartDemo" android:versionCode="1" android:versionName="1.0"> <application android:icon="drawable/icon" androi

40、d:label="string/app_name"> <activity android:name=".SayHello" android:label="string/app_name"> <intent-filter> <action android:name="ent.action.MAIN" /> <category android:name="ent.cat

41、egory.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".BootBroadcastReceiver"> <intent-filter> <action android:name="ent.action.BOOT_COMPLETED" /> </intent-filter> </rec

42、eiver> </application> <uses-sdk android:minSdkVersion="3" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission> </manifest>  注意其中粗體字那一部分,該節(jié)點向系統(tǒng)注冊了一個receiver,子節(jié)點intent-filter表示

43、接收ent.action.BOOT_COMPLETED消息。不要忘記配置android.permission.RECEIVE_BOOT_COMPLETED權(quán)限。 完成后,編譯出apk包,安裝到模擬器或手機中。關(guān)機,重新開機。 如果是系統(tǒng)進程的話,需要加入init配置文件來啟動,隨著linux啟動而啟動  注:還有一些關(guān)于Activity之間的數(shù)據(jù)傳遞與Intent的具體應(yīng)用、Activity的生命周期等老師的PPT上已經(jīng)都有了。具體的筆試題目前只有華為有筆試題,并且也只是一般的選擇題,其余公司都是一些JAVA的基礎(chǔ)題,只會在面試的時

44、候問一些關(guān)于Android的題,并且有的公司經(jīng)常問一些關(guān)于底層C庫的調(diào)用與Android隱式API的題。 -面試題目及其答案1、 Android dvm的進程和Linux的進程, 應(yīng)用程序的進程是否為同一個概念DVM指dalivk的虛擬機。每一個Android應(yīng)用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。而每一個DVM都是在Linux 中的一個進程,所以說可以認為是同一個概念。2、sim卡的EF 文件有何作用sim卡的文件系統(tǒng)有自己規(guī)范,主要是為了和手機通訊,sim本 身可以有自己的操作系統(tǒng),EF就是作存儲并和手機通訊用的3、嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種,

45、 各有何特性頁式,段式,段頁,用到了MMU,虛擬空間等技術(shù)4、 什么是嵌入式實時操作系統(tǒng), Android 操作系統(tǒng)屬于實時操作系統(tǒng)嗎?嵌入式實時操作系統(tǒng)是指當外界事件或數(shù)據(jù)產(chǎn)生時,能夠接受并以足夠快的速度予以處理,其處理的結(jié)果又能在規(guī)定的時間之內(nèi)來控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)作出快速響應(yīng),并控制所有實時任務(wù)協(xié)調(diào)一致運行的嵌入式操作系統(tǒng)。主要用于工業(yè)控制、 軍事設(shè)備、 航空航天等領(lǐng)域?qū)ο到y(tǒng)的響應(yīng)時間有苛刻的要求,這就需要使用實時系統(tǒng)。又可分為軟實時和硬實時兩種,而android是基于linux內(nèi)核的,因此屬于軟實時。5、一條最長的短信息約占多少byte?中文70(包括標點),英文160,160個字

46、節(jié)。6、 android中的動畫有哪幾類,它們的特點和區(qū)別是什么?兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現(xiàn)方式可以使視圖組件移動、放大、縮小以及產(chǎn)生透明度的變化;另一種Frame動畫,傳統(tǒng)的動畫方法,通過順序的播放排列好的圖片來實現(xiàn),類似電影。7、handler機制的原理andriod提供了 Handler 和 Looper 來滿足線程間的通信。Handler 先進先出原則。Looper類用來管理特定線程內(nèi)對象之間的消息交換(Message Exchange)。1)Looper: 一個線程可以產(chǎn)生一個Looper對象,由它來管理此線程里的Message Q

47、ueue(消息隊列)。2)Handler: 你可以構(gòu)造Handler對象來與Looper溝通,以便push新消息到Message Queue里;或者接收Looper從Message Queue取出)所送來的消息。3) Message Queue(消息隊列):用來存放線程放入的消息。4)線程:UI thread 通常就是main thread,而Android啟動程序時會替它建立一個Message Queue。8、說說mvc模式的原理,它在android中的運用MVC(Model_view_contraller)”模型_視圖_控制器”。 MVC應(yīng)用程序總是由這三個部分組成。Event(事件)導致

48、Controller改變Model或View,或者同時改變兩者。只要 Controller改變了Models的數(shù)據(jù)或者屬性,所有依賴的View都會自動更新。類似的,只要Contro9、Activity的生命周期和其他手機 平臺 的應(yīng)用 程序 一樣,Android的應(yīng)用程序 的生命周期是被統(tǒng)一掌控 的,也 就是說我們寫的應(yīng)用程序命運掌握在別人(系統(tǒng))的手里,我們不能改變它,只能學習 并 適應(yīng)它。 簡單地說一下為什么是這樣:我們手機在運行 一個應(yīng)用程序的時候,有可能打進來電話 發(fā)進來短信 ,或者沒有電了,這時候程序都會被中斷,優(yōu)先去服務(wù)電話的基本功能 ,另 外系統(tǒng)也不允許你占用太多資源

49、,至少要保證電話功能吧,所以資源不足的時候也就有可 能被干掉。言歸正傳,Activity的基本生命周期如下代碼 所示:Java代碼1. public2. class MyActivity extends Activity 3. protected4. void onCreate(Bundle savedInstanceState);5.6. protected7. void onStart();8.9. protected10. void onResume();11.12. protected13. void onPause();14.15. protected16. void onStop(

50、);17.18. protected19. void onDestroy();20. 21.22.public class MyActivity extends Activity protected void onCreate(Bundle savedInstanceState);protected void onStart();protected void onResume();protected void onPause();protected void onStop();protected void onDestroy();你自己寫的Activity會按需要 重載這些方法,onCreat

51、e是免不了的,在一個Activity正常啟動的過程中,他們被調(diào)用的順序是 onCreate -> onStart -> onResume, 在Activity被干掉的時候順序是onPause -> onStop -> onDestroy ,這樣就是一個完整的生命周期,但是有人問了 ,程序正運行著呢來電話了,這個程序咋辦?中止了唄,如果中止的時候新出的一個Activity是全屏的那么:onPause->onStop ,恢復的時候onStart->onResume ,如果打斷 這個應(yīng)用程序的是一個Theme為Translucent 或者Dialog 的Activ

52、ity那么只是onPause ,恢復 的時候onResume 。詳細介紹一下這幾個方法中系統(tǒng)在做什么以及我們應(yīng)該做什么:onCreate: 在這里創(chuàng)建界面 ,做一些數(shù)據(jù) 的初始化工作onStart: 到這一步變成用戶可見不可交互 的onResume: 變成和用戶可交互 的,(在activity 棧系統(tǒng)通過棧的方式管理這些個Activity的最上面,運行完彈出棧,則回到上一個Activity)onPause: 到這一步是可見但不可交互 的,系統(tǒng)會停止動畫 等消耗CPU 的事情 從上文的描述已經(jīng)知道,應(yīng)該在這里保存你的一些數(shù)據(jù),因為這個時候 你的程序的優(yōu)先級降低,有可能被系統(tǒng)收回。在這里保存的數(shù)據(jù)

53、,應(yīng)該在 onResume里讀出來,注意:這個方法里做的事情時間要短,因為下一 個activity不會等到這個方法完成才啟動onstop: 變得不可見 ,被下一個activity覆蓋了onDestroy: 這是activity被干掉前最后一個被調(diào)用方法了,可能是外面類調(diào)用finish方 法或者是系統(tǒng)為了節(jié)省空間將它暫時性的干掉,可以用isFinishing()來判斷它,如果你有一個Progress Dialog在線程中轉(zhuǎn)動,請在onDestroy里 把他cancel掉,不然等線程結(jié)束的時候,調(diào)用Dialog的cancel方法會拋 異常的。onPause,onstop, onDestroy,三種

54、狀態(tài) 下 activity都有可能被系統(tǒng)干掉為了保證程序的正確性,你要在onPause()里寫上持久層操作的代碼,將用戶編輯的內(nèi)容都保存到存儲介質(zhì)上(一般都是數(shù)據(jù)庫 )。實際工作中因為生命周期的變化而帶來的問題也很多,比如你的應(yīng)用程序起了新的線程在跑,這時候中斷了,你還要去維護那個線程,是暫停還是殺掉還是數(shù)據(jù)回滾,是吧?因為Activity可能被殺掉,所以線程中使用的變量和一些界面元素就千萬要注意了,一般我都是采用Android的消息機制 Handler,Message來處理多線程和界面交互的問題。這個我后面會講一些,最近因為這些東西頭已經(jīng)很大了,等我理清思緒再跟大家分享。 ller改變了Vi

55、ew,View會 從潛在的Model中獲取數(shù)據(jù)來刷新自己。10、讓Activity變成一個窗口:Activity屬性設(shè)定講點輕松的吧,可能有人希望做出來的應(yīng)用程序是一個漂浮在手機主界面的東西,那么很 簡單你只需要設(shè)置 一下Activity的主題就可以了在AndroidManifest.xml 中定義 Activity的 地方一句話:Xml代碼1. android :theme="android:style/Theme.Dialog"2.3. android:theme="android:style/Theme.Dialog"android :theme=

56、"android:style/Theme.Dialog"android:theme="android:style/Theme.Dialog"這就使你的應(yīng)用程序變成對話框的形式彈出來了,或者Xml代碼1. android:theme="android:style/Theme.Translucent"2.3. android:theme="android:style/Theme.Translucent"android:theme="android:style/Theme.Translucent"an

57、droid:theme="android:style/Theme.Translucent"就變成半透明的,友情提示-.-類似的這種activity的屬性可以在android.R.styleable 類的AndroidManifestActivity 方法中看到,AndroidManifest.xml中所有元素的屬性的介紹都可以參考這個類android.R.styleable上面說的是屬性名稱,具體有什么值是在android.R.style中 可以看到,比如這個"android:style/Theme.Dialog" 就對應(yīng)于android.R.style

58、.Theme_Dialog ,('_'換成'.' < -注意:這個是文章內(nèi)容不是笑臉)就可以用在描述文件 中了,找找類定義和描述文件中的對應(yīng)關(guān)系就都明白了。11、 你后臺的Activity被系統(tǒng)回收怎么辦:onSaveInstanceState當你的程序中某一個Activity A 在運行時中,主動或被動地運行另一個新的Activity B 這個時候A會執(zhí)行Java代碼1. public2. void onSaveInstanceState(Bundle outState) 3. super.onSaveInstanceState(outState);4.

59、 outState.putLong("id", 1234567890);5. publicvoid onSaveInstanceState(Bundle outState) super.onSaveInstanceState(outState);outState.putLong("id", 1234567890);B 完成以后又會來找A, 這個時候就有兩種情況,一種是A被回收,一種是沒有被回收,被回 收的A就要重新調(diào)用onCreate()方法,不同于直接啟動的是這回onCreate()里是帶上參數(shù) savedInstanceState,沒被收回的就還是o

60、nResume就好了。savedInstanceState是一個Bundle對象,你基本上可以把他理解為系統(tǒng)幫你維護的一個Map對象。在onCreate()里你可能會用到它,如果正常啟動onCreate就不會有它,所以用的時候要判斷一下是否為空。Java代碼1. if(savedInstanceState != null)2. long id = savedInstanceState.getLong("id");3. if(savedInstanceState != null)long id = savedInstanceState.getLong("id&quo

61、t;);就像官方的Notepad教程 里的情況,你正在編輯某一個note,突然被中斷,那么就把這個note的id記住,再起來的時候就可以根據(jù)這個id去把那個note取出來,程序就完整一些。這也是看你的應(yīng)用需不需要保存什么,比如你的界面就是讀取一個列表,那就不需要特殊記住什么,哦, 沒準你需要記住滾動條的位置.12、 調(diào)用與被調(diào)用:我們的通信使者Intent要說Intent了,Intent就是這個這個意圖 ,應(yīng)用程序間Intent進行交流,打個電話啦,來個 電話啦都會發(fā)Intent, 這個是Android架構(gòu)的松耦合的精髓部分,大大提高了組件的復用性,比如你要在你的應(yīng)用程序中點擊按鈕,給某人打電話,很簡單啊,看下代碼先:Java代碼1. Intent intent = new Intent();2. intent.setAction(Intent.ACTION_CALL);3. intent.setData(Uri.parse("tel:" + number);4. startActivity(intent);Intent intent = new Intent();int

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論