版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、android 常見面試題以及答案 1. 請(qǐng)描述下Activity的生命周期。2. 如果后臺(tái)的Activity由于某原因被系統(tǒng)回收了,如何在被系統(tǒng)回收之前保存當(dāng)前狀態(tài)?3. 如何將一個(gè)Activity設(shè)置成窗口的樣式。(Edited by Sodino)4. 如何退出Activity?如何安全退出已調(diào)用多個(gè)Activity的Application?5. 請(qǐng)介紹下Android中常用的五種布局。6.
2、; 請(qǐng)介紹下Android的數(shù)據(jù)存儲(chǔ)方式。(Edited by Sodino)7. 請(qǐng)介紹下ContentProvider是如何實(shí)現(xiàn)數(shù)據(jù)共享的。(Edited by Sodino)8. 如何啟用Service,如何停用Service。(Edited by Sodino)9. 注冊(cè)廣播有幾種方式,這些方式有何優(yōu)缺點(diǎn)?請(qǐng)談?wù)凙ndroid引入廣播機(jī)制的用意。10. 請(qǐng)解釋下在單線程模型中Message、Handler、Message
3、 Queue、Looper之間的關(guān)系。11. AIDL的全稱是什么?如何工作?能處理哪些類型的數(shù)據(jù)?12. 請(qǐng)解釋下Android程序運(yùn)行時(shí)權(quán)限與文件系統(tǒng)權(quán)限的區(qū)別。(Edited by Sodino)13. 系統(tǒng)上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?請(qǐng)說明原由。14. 有一個(gè)一維整型數(shù)組intdata保存的是一張寬為width,高為height的圖片像素值信息。請(qǐng)寫一個(gè)算法,將該圖片所有的白色不透明(0xffffffff)像素點(diǎn)的透明度調(diào)
4、整為50%。15. 你如何評(píng)價(jià)Android系統(tǒng)?優(yōu)缺點(diǎn)。1. Android dvm的進(jìn)程和Linux的進(jìn)程, 應(yīng)用程序的進(jìn)程是否為同一個(gè)概念DVM 執(zhí)行時(shí),在linux看來就是一應(yīng)用程序進(jìn)程,所以說是同一概念2. sim卡的EF 文件有何作用sim卡的文件系統(tǒng)有自己規(guī)范,主要是為了和手機(jī)通訊,sim本 身可以有自己的操作系統(tǒng),EF就是作存儲(chǔ)并和手機(jī)通訊用的4.嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種, 各有何特性頁式,段式,段頁,用到了MMU,虛擬空間等技術(shù)5. 什么是嵌入式實(shí)時(shí)操作系統(tǒng), Android 操作系統(tǒng)屬于實(shí)時(shí)操作系統(tǒng)嗎?分 硬實(shí)時(shí)和軟實(shí)時(shí),andro
5、id屬于linux內(nèi)核,linux在用戶空間可搶占,內(nèi)核空間在2.4以后可局部搶占,嚴(yán)格來講 Android屬于軟實(shí)時(shí)系統(tǒng)6. 一條最長的短信息約占多少byte? 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ī)通訊
6、用的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
7、(包括標(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ì)象,由它
8、來管理此線程里的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)用MVC(Model_view_contraller)”模型_視圖_控制器”。 MVC應(yīng)用程序總是由這三
9、個(gè)部分組成。Event(事件)導(dǎo)致Controller改變Model或View,或者同時(shí)改變兩者。只要 Controller改變了Models的數(shù)據(jù)或者屬性,所有依賴的View都會(huì)自動(dòng)更新。類似的,只要Controller改變了View,View會(huì) 從潛在的Model中獲取數(shù)據(jù)來刷新自己。一,listview你是怎么優(yōu)化的。二,view的刷新,之前說過三,IPC及原理四,Android多線程6 n; 五,Android為什么要設(shè)計(jì)4大組件,他們之間的聯(lián)系,不設(shè)計(jì)行不行(主要是為了實(shí)現(xiàn)MVC模式,然而java中最難的模式也是這個(gè),很少有產(chǎn)品能將這個(gè)模式做得很好【Technicolor的
10、面試官問的這個(gè)】) 六,service的周期,activity的周期,談下你對(duì)Android內(nèi)部應(yīng)用的了解,比如他做電話,以及聯(lián)系人等等應(yīng)用。框架層有很多東西還是多看看,熟悉Android怎么做的,不管你做應(yīng)用程開發(fā)還是應(yīng)用框架層開發(fā)很有好處的。在就是你項(xiàng)目經(jīng)驗(yàn),突出你遇到什么難點(diǎn),然后是怎么解決的!盡量將每個(gè)技術(shù)點(diǎn)凸顯出來,當(dāng)然面試官有時(shí)候會(huì)為了體現(xiàn)你是否真正做過,他會(huì)問你,你在這個(gè)應(yīng)用中做那個(gè)模塊,用了多少個(gè)類之類的問題。偶爾有的面試官會(huì)問你,你用過Android自帶的單元測(cè)試了沒,怎么用的?當(dāng)然我面試過很多家單位,有的是做平板,手機(jī),數(shù)字電視,有的是做出個(gè)erp之類
11、的客戶端等等,出于前面的三個(gè),基本上都是將Android的全部改掉,如果真正要做Android的話,大家要學(xué)的還很多。總之,一句話,什么樣的面試官都有,去面試的時(shí)候要做好一切心理準(zhǔn)備,不管是技術(shù)還是基礎(chǔ)都得扎實(shí)。一個(gè)人的交談能力也很重要,總之不是非常標(biāo)準(zhǔn)的普通話,最起碼你說的得讓別人聽得懂,而且得把面試官講得非常徹底,這樣你獲得offer的機(jī)會(huì)更大,談工資也有優(yōu)勢(shì)當(dāng)然曾經(jīng)一家公司的面試官跟我說過,技術(shù)是不惜錢的,只要你有能力,多少錢他都請(qǐng)。確實(shí),來北京求職期間,牛人真的很多,而且有的面試官也非常好,給了很多忠肯的意見。并不是每個(gè)面試官都特想為難你的最主要的還是想知道你的技術(shù),因?yàn)樗麄円彩浅怨?/p>
12、飯,得為這個(gè)負(fù)責(zé)。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時(shí),沒有使用緩存contentview 衍生listview的優(yōu)化問題-減少創(chuàng)建view的對(duì)象,充分使用contentview,可以使用一靜態(tài)類來優(yōu)化處理ge
13、tview的過程/ 3.Bitmap對(duì)象不使用時(shí)采用recycle()釋放內(nèi)存 4.activity中的對(duì)象的生命周期大于activity 調(diào)試方法: DDMS=> HEAPSZIE=>dataobject=>Total Size 還有其他問題,大家歡迎提出阿,可以是整體架構(gòu)的,還有這個(gè)Hal層.這篇文章會(huì)涉及到以下幾個(gè)內(nèi)容一 Activity的生命周期 二 讓Activity變成一個(gè)窗口:Activity屬性設(shè)定 三 你后臺(tái)的Activity被系統(tǒng) 回收怎么辦:onSaveInstanceState 四
14、調(diào)用與被調(diào)用:我們的通信使者 - Intent一 Activity的生命周期 和其他手機(jī) 平臺(tái) 的應(yīng)用 程序 一樣,Android的應(yīng)用程序 的生命周期是被統(tǒng)一掌控 的,也 就是說我們寫的應(yīng)用程序命運(yùn)掌握在別人(系統(tǒng))的手里,我們不能改變它,只能學(xué)習(xí) 并 適應(yīng)它。簡單地說一下為什么是這樣:我們手機(jī)在運(yùn)行 一個(gè)應(yīng)用程序的時(shí)候,有可能打進(jìn)來電話 發(fā)進(jìn)來短信 ,或者沒有電了,這時(shí)候程序都會(huì)被中斷,優(yōu)先去服務(wù)電話的基本功能 ,另 外系統(tǒng)
15、也不允許你占用太多資源 ,至少要保證電話功能吧,所以資源不足的時(shí)候也就有可 能被干掉。 如何優(yōu)化Android中ListView滾動(dòng)速度的方法他是讓你滾動(dòng)的快點(diǎn)還是慢點(diǎn)?慢的話: 有個(gè)延遲加載數(shù)據(jù)的方法,在API的demo中。要是讓ListView滾動(dòng)速度快的話,你可以這樣告訴他: 讓他的手指在屏幕上迅速的上下滑動(dòng),當(dāng)他的手指移動(dòng)速度達(dá)到100px/0.1秒后,就可以看到快速滑動(dòng)的效果了!Android的國際化與本地化internationalization (國際化)簡稱 i18n,因?yàn)樵趇和n之間還有18個(gè)字
16、符,localization(本地化 ),簡稱L10n。 一般說明一個(gè)地區(qū)的語言時(shí),用 語言_地區(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 對(duì)i18n和L10n提供了非常好的支持。android沒有專門的API來提供國際化,而是通過對(duì)不
17、同resource的命名來達(dá)到國際化,同時(shí)這種命名方法還可用于對(duì)硬件的區(qū)分,如不同的新視屏用不同的圖片。 在eclipse的工程中,res目錄有默認(rèn)幾項(xiàng)resource,如 drawable, layout,menu,values其余還有res/anim/ 用來放置動(dòng)畫res/xml/ 用來放置style theme等xml定義。res/raw/ 用來放置data數(shù)據(jù) 我們引用這些resource時(shí)候,在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的字符串。當(dāng)程序運(yùn)行時(shí),通過Resource類會(huì)裝載strings.xml中名字為hello的字符串。但Resource類裝載strings.xml時(shí)會(huì)根據(jù)當(dāng)前手機(jī)的設(shè)置來選擇裝載哪一個(gè)xml文件。這些手機(jī)設(shè)置有MCC and MNC, Language and region, Screen dimensions, Wider/taller scree
20、ns, Screen orientation,Screen pixel density, Touchscreen type, SDK version,也就是說通過手機(jī)當(dāng)前語言區(qū)域,屏幕的大小,屏幕像素,以及當(dāng)前android sdk的版本號(hào)來選擇。通過把strings.xml放置在以這些選項(xiàng)命名的文件夾下,Resource類就能正確的裝載所需的字符串。 我們以不同的local和region來做一次國際化,首先values表示默認(rèn)的字符串,也即當(dāng)Resource找不到匹配的資源時(shí),默認(rèn)使用values文件夾下的資源,其余 drawable等資源也是
21、同樣的。 當(dāng)命名這些文件夾的名字時(shí),不同的選項(xiàng)用-分開,而且次序必須和 andorid 文檔中table文件夾的命名必須都是小寫字符,否則在一些大小敏感的文件系統(tǒng)中可能會(huì)出錯(cuò),如果你用大寫,eclipse的adt都會(huì)自動(dòng)報(bào)錯(cuò)。小寫字母r表示region的意思。 上圖命名了中文簡體和繁體以及默認(rèn)選項(xiàng),在strings.xml中除了字符串本身不一樣,xml中定義該字符串的名字,id都是一樣的。所以在代碼或者xml中引用該資源時(shí),只要引用名字即可或者id即可,程序啟動(dòng)時(shí)候Resource類回到相應(yīng)的目錄下去尋找正確的字符串(資源) 通過在Settings中設(shè)置lo
22、cale& Text 我們可以讓Resource類來選擇相應(yīng)文件夾下的內(nèi)容,選擇英語時(shí)候結(jié)果如下,也即選擇了 values下的strings.xml選擇 chinese(china)時(shí),也即選了 values-zh-rcn目錄下的strings.xml選擇 chinese(taiwan)時(shí),也即選了 values-zh-rtw目錄下的strings.xml 其余手機(jī)的選項(xiàng),像屏幕的像素等都可以建立相應(yīng)得目錄。Android常用控件的信息!單選框(RadioButton與RadioGroup): RadioGroup用于對(duì)單選框進(jìn)行分組,相同組內(nèi)的單選框只有一個(gè)單選框
23、被選中。 事件:setOnCheckedChangeListener(),處理單選框被選擇事件。把RadioGroup.OnCheckedChangeListener實(shí)例作為參數(shù)傳入。多選框(CheckBox): 每個(gè)多選框都是獨(dú)立的,可以通過迭代所有的多選框,然后根據(jù)其狀態(tài)是否被選中在獲取其值。 事件:setOnCheckChangeListener()處理多選框被選擇事件。把CompoundButton.OnCheckedChangeListener實(shí)例作為參數(shù)傳入下拉列表框(Spring): Spinner.getItemAtPosit
24、ion(Spinner.getSelectedItemPosition();獲取下拉列表框的值。 事件:setOnItemSelectedListener(),處理下拉列表框被選擇事件把AdapterView.OnItemSelectedListener實(shí)例作為參數(shù)傳入;拖動(dòng)條(SeekBar): SeekBar.getProgress()獲取拖動(dòng)條當(dāng)前值 事件:setOnSeekBarChangeListener(),處理拖動(dòng)條值變化事件,把SeekBar.OnSeekBarChangeListener實(shí)例作為參數(shù)傳入。菜單(Menu): 重寫Acti
25、vity的onCreatOptionMenu(Menu menu)方法,該方法用于創(chuàng)建選項(xiàng)菜單,咋用戶按下手機(jī)的"Menu"按鈕時(shí)就會(huì)顯示創(chuàng)建好的菜單,在onCreatOptionMenu(Menu Menu)方法內(nèi)部可以調(diào)用Menu.add()方法實(shí)現(xiàn)菜單的添加。 重寫Activity的onMenuItemSelected()方法,該方法用于處理菜單被選擇事件。進(jìn)度對(duì)話框(ProgressDialog): 創(chuàng)建并顯示一個(gè)進(jìn)度對(duì)話框:ProgressDialog.show(ProgressDialogActivity.this,"請(qǐng)稍等&quo
26、t;,"數(shù)據(jù)正在加載中.",true); 設(shè)置對(duì)話框的風(fēng)格:setProgressStyle() ProgressDialog.STYLE_SPINNER 旋轉(zhuǎn)進(jìn)度條風(fēng)格(為默認(rèn)風(fēng)格) ProgressDialog.STYLE_HORIZONTAL 橫向進(jìn)度條風(fēng)格Android系統(tǒng)的架構(gòu)!android的系統(tǒng)架構(gòu)和其操作系統(tǒng)一樣,采用了分層的架構(gòu)。從架構(gòu)圖看,android分為四個(gè)層,從高層到低層分別是應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運(yùn)行庫層和linux核心層。1.應(yīng)用程序Android會(huì)同一系列核心應(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è)計(jì)簡化了組件的重用;任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過得遵循框架的安全性限制)。同樣,該應(yīng)用程序重用機(jī)制也使用戶可以方便的替換程序組件。隱藏在每個(gè)應(yīng)用后面的是一系列的服務(wù)和系統(tǒng), 其中包括;* 豐富而又可擴(kuò)展的視圖(Views),可以用來構(gòu)建應(yīng)用程序, 它包括列表(lists),網(wǎng)格(grids),文本框(te
28、xt boxes),按鈕(buttons), 甚至可嵌入的web瀏覽器。* 內(nèi)容提供器(Content Providers)使得應(yīng)用程序可以訪問另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫), 或者共享它們自己的數(shù)據(jù)* 資源管理器(Resource Manager)提供 非代碼資源的訪問,如本地字符串,圖形,和布局文件( layout files )。* 通知管理器 (Notification Manager) 使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息。* 活動(dòng)管理器( Activity Manager) 用來管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。有關(guān)更多的細(xì)節(jié)和怎樣從頭寫一個(gè)應(yīng)用程序,
29、請(qǐng)參考 如何編寫一個(gè) Android 應(yīng)用程序.3.系統(tǒng)運(yùn)行庫1)程序庫Android 包含一些C/C+庫,這些庫能被Android系統(tǒng)中不同的組件使用。它們通過 Android 應(yīng)用程序框架為開發(fā)者提供服務(wù)。以下是一些核心庫:* 系統(tǒng) C 庫 - 一個(gè)從 BSD 繼承來的標(biāo)準(zhǔn) C 系統(tǒng)函數(shù)庫( libc ), 它是專門為基于 embedded linux 的設(shè)備定制的。* 媒體庫 - 基于 PacketVideo OpenCORE;該庫支持多種常用的音頻、視頻格式回放和錄制,同時(shí)支持靜態(tài)圖像文件。編碼格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。* S
30、urface Manager - 對(duì)顯示子系統(tǒng)的管理,并且為多個(gè)應(yīng)用程序提 供了2D和3D圖層的無縫融合。* LibWebCore - 一個(gè)最新的web瀏覽器引擎用,支持Android瀏覽器和一個(gè)可嵌入的web視圖。* SGL - 底層的2D圖形引擎* 3D libraries - 基于OpenGL ES 1.0 APIs實(shí)現(xiàn);該庫可以使用硬件 3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。* FreeType -位圖(bitmap)和矢量(vector)字體顯示。* SQLite - 一個(gè)對(duì)于所有應(yīng)用程序可用,功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫引擎。2)Android 運(yùn)行庫Android 包括
31、了一個(gè)核心庫,該核心庫提供了JAVA編程語言核心庫的大多數(shù)功能。每一個(gè)Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例。Dalvik被設(shè)計(jì)成一個(gè)設(shè)備可以同時(shí)高效地運(yùn)行多個(gè)虛擬系統(tǒng)。 Dalvik虛擬機(jī)執(zhí)行(.dex)的Dalvik可執(zhí)行文件,該格式文件針對(duì)小內(nèi)存使用做了優(yōu)化。同時(shí)虛擬機(jī)是基于寄存器的,所有的類都經(jīng)由JAVA編譯器編譯,然后通過SDK中 的 “dx” 工具轉(zhuǎn)化成.dex格式由虛擬機(jī)執(zhí)行。Dalvik虛擬機(jī)依賴于linux內(nèi)核的一些功能,比如線程機(jī)制和底層內(nèi)存管理機(jī)制。4.Linux 內(nèi)核 Android 的核心系統(tǒng)服務(wù)依賴于 Linu
32、x 2.6 內(nèi)核,如安全性,內(nèi)存管理,進(jìn)程管理, 網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型。 Linux 內(nèi)核也同時(shí)作為硬件和軟件棧之間的抽象層。 開機(jī)自動(dòng)運(yùn)行程序! Android實(shí)現(xiàn)開機(jī)自動(dòng)運(yùn)行程序2009-12-31 15:01:17.0 開機(jī) 自動(dòng) 運(yùn)行 程序 有些時(shí)候,應(yīng)用需要在開機(jī)時(shí)就自動(dòng)運(yùn)行,例如某個(gè)自動(dòng)從網(wǎng)上更新內(nèi)容的后臺(tái)serv
33、ice。怎樣實(shí)現(xiàn)開機(jī)自動(dòng)運(yùn)行的應(yīng)用?在撰寫本文時(shí),聯(lián)想到高煥堂先生以“Don''t call me, I''ll call you back!”總結(jié)Android框架,真是說到點(diǎn)子上了。理解這句話的含義,許多有關(guān)Android平臺(tái)上實(shí)現(xiàn)某種功能的問題,都能迎刃而解。 使用場景:手機(jī)開機(jī)后,自動(dòng)運(yùn)行程序,在屏幕上顯示"Hello. I started!"字樣。 背景知識(shí):當(dāng)Android啟動(dòng)時(shí),會(huì)發(fā)出一個(gè)系統(tǒng)廣播,內(nèi)容為ACTION_BOOT_COMPLETED,它的字符串常量表示為ent.action
34、.BOOT_COMPLETED。只要在程序中“捕捉”到這個(gè)消息,再啟動(dòng)之即可。記住,Android框架說:Don''t call me, I''ll call you back。我們要做的是做好接收這個(gè)消息的準(zhǔn)備,而實(shí)現(xiàn)的手段就是實(shí)現(xiàn)一個(gè)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); 這段代碼很簡單,當(dāng)Activity啟動(dòng)時(shí),創(chuàng)建一個(gè)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中,檢測(cè)接收到的Intent是否符合BOOT_COMPLETED,如果符合,則啟動(dòng)SayHello那個(gè)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é)點(diǎn)向系統(tǒng)注冊(cè)了一個(gè)receiver,子節(jié)點(diǎn)intent-filter表示
43、接收ent.action.BOOT_COMPLETED消息。不要忘記配置android.permission.RECEIVE_BOOT_COMPLETED權(quán)限。 完成后,編譯出apk包,安裝到模擬器或手機(jī)中。關(guān)機(jī),重新開機(jī)。 如果是系統(tǒng)進(jìn)程的話,需要加入init配置文件來啟動(dòng),隨著linux啟動(dòng)而啟動(dòng) 注:還有一些關(guān)于Activity之間的數(shù)據(jù)傳遞與Intent的具體應(yīng)用、Activity的生命周期等老師的PPT上已經(jīng)都有了。具體的筆試題目前只有華為有筆試題,并且也只是一般的選擇題,其余公司都是一些JAVA的基礎(chǔ)題,只會(huì)在面試的時(shí)
44、候問一些關(guān)于Android的題,并且有的公司經(jīng)常問一些關(guān)于底層C庫的調(diào)用與Android隱式API的題。 -面試題目及其答案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)存管理有哪幾種,
45、 各有何特性頁式,段式,段頁,用到了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è)字
46、節(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 Q
47、ueue(消息隊(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)用MVC(Model_view_contraller)”模型_視圖_控制器”。 MVC應(yīng)用程序總是由這三個(gè)部分組成。Event(事件)導(dǎo)致
48、Controller改變Model或View,或者同時(shí)改變兩者。只要 Controller改變了Models的數(shù)據(jù)或者屬性,所有依賴的View都會(huì)自動(dòng)更新。類似的,只要Contro9、Activity的生命周期和其他手機(jī) 平臺(tái) 的應(yīng)用 程序 一樣,Android的應(yīng)用程序 的生命周期是被統(tǒng)一掌控 的,也 就是說我們寫的應(yīng)用程序命運(yùn)掌握在別人(系統(tǒng))的手里,我們不能改變它,只能學(xué)習(xí) 并 適應(yīng)它。 簡單地說一下為什么是這樣:我們手機(jī)在運(yùn)行 一個(gè)應(yīng)用程序的時(shí)候,有可能打進(jìn)來電話 發(fā)進(jìn)來短信 ,或者沒有電了,這時(shí)候程序都會(huì)被中斷,優(yōu)先去服務(wù)電話的基本功能 ,另 外系統(tǒng)也不允許你占用太多資源
49、,至少要保證電話功能吧,所以資源不足的時(shí)候也就有可 能被干掉。言歸正傳,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會(huì)按需要 重載這些方法,onCreat
51、e是免不了的,在一個(gè)Activity正常啟動(dòng)的過程中,他們被調(diào)用的順序是 onCreate -> onStart -> onResume, 在Activity被干掉的時(shí)候順序是onPause -> onStop -> onDestroy ,這樣就是一個(gè)完整的生命周期,但是有人問了 ,程序正運(yùn)行著呢來電話了,這個(gè)程序咋辦?中止了唄,如果中止的時(shí)候新出的一個(gè)Activity是全屏的那么:onPause->onStop ,恢復(fù)的時(shí)候onStart->onResume ,如果打斷 這個(gè)應(yīng)用程序的是一個(gè)Theme為Translucent 或者Dialog 的Activ
52、ity那么只是onPause ,恢復(fù) 的時(shí)候onResume 。詳細(xì)介紹一下這幾個(gè)方法中系統(tǒng)在做什么以及我們應(yīng)該做什么:onCreate: 在這里創(chuàng)建界面 ,做一些數(shù)據(jù) 的初始化工作onStart: 到這一步變成用戶可見不可交互 的onResume: 變成和用戶可交互 的,(在activity 棧系統(tǒng)通過棧的方式管理這些個(gè)Activity的最上面,運(yùn)行完彈出棧,則回到上一個(gè)Activity)onPause: 到這一步是可見但不可交互 的,系統(tǒng)會(huì)停止動(dòng)畫 等消耗CPU 的事情 從上文的描述已經(jīng)知道,應(yīng)該在這里保存你的一些數(shù)據(jù),因?yàn)檫@個(gè)時(shí)候 你的程序的優(yōu)先級(jí)降低,有可能被系統(tǒng)收回。在這里保存的數(shù)據(jù)
53、,應(yīng)該在 onResume里讀出來,注意:這個(gè)方法里做的事情時(shí)間要短,因?yàn)橄乱?個(gè)activity不會(huì)等到這個(gè)方法完成才啟動(dòng)onstop: 變得不可見 ,被下一個(gè)activity覆蓋了onDestroy: 這是activity被干掉前最后一個(gè)被調(diào)用方法了,可能是外面類調(diào)用finish方 法或者是系統(tǒng)為了節(jié)省空間將它暫時(shí)性的干掉,可以用isFinishing()來判斷它,如果你有一個(gè)Progress Dialog在線程中轉(zhuǎn)動(dòng),請(qǐng)?jiān)趏nDestroy里 把他cancel掉,不然等線程結(jié)束的時(shí)候,調(diào)用Dialog的cancel方法會(huì)拋 異常的。onPause,onstop, onDestroy,三種
54、狀態(tài) 下 activity都有可能被系統(tǒng)干掉為了保證程序的正確性,你要在onPause()里寫上持久層操作的代碼,將用戶編輯的內(nèi)容都保存到存儲(chǔ)介質(zhì)上(一般都是數(shù)據(jù)庫 )。實(shí)際工作中因?yàn)樯芷诘淖兓鴰淼膯栴}也很多,比如你的應(yīng)用程序起了新的線程在跑,這時(shí)候中斷了,你還要去維護(hù)那個(gè)線程,是暫停還是殺掉還是數(shù)據(jù)回滾,是吧?因?yàn)锳ctivity可能被殺掉,所以線程中使用的變量和一些界面元素就千萬要注意了,一般我都是采用Android的消息機(jī)制 Handler,Message來處理多線程和界面交互的問題。這個(gè)我后面會(huì)講一些,最近因?yàn)檫@些東西頭已經(jīng)很大了,等我理清思緒再跟大家分享。 ller改變了Vi
55、ew,View會(huì) 從潛在的Model中獲取數(shù)據(jù)來刷新自己。10、讓Activity變成一個(gè)窗口:Activity屬性設(shè)定講點(diǎn)輕松的吧,可能有人希望做出來的應(yīng)用程序是一個(gè)漂浮在手機(jī)主界面的東西,那么很 簡單你只需要設(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)用程序變成對(duì)話框的形式彈出來了,或者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中所有元素的屬性的介紹都可以參考這個(gè)類android.R.styleable上面說的是屬性名稱,具體有什么值是在android.R.style中 可以看到,比如這個(gè)"android:style/Theme.Dialog" 就對(duì)應(yīng)于android.R.style
58、.Theme_Dialog ,('_'換成'.' < -注意:這個(gè)是文章內(nèi)容不是笑臉)就可以用在描述文件 中了,找找類定義和描述文件中的對(duì)應(yīng)關(guān)系就都明白了。11、 你后臺(tái)的Activity被系統(tǒng)回收怎么辦:onSaveInstanceState當(dāng)你的程序中某一個(gè)Activity A 在運(yùn)行時(shí)中,主動(dòng)或被動(dòng)地運(yùn)行另一個(gè)新的Activity B 這個(gè)時(shí)候A會(huì)執(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 完成以后又會(huì)來找A, 這個(gè)時(shí)候就有兩種情況,一種是A被回收,一種是沒有被回收,被回 收的A就要重新調(diào)用onCreate()方法,不同于直接啟動(dòng)的是這回onCreate()里是帶上參數(shù) savedInstanceState,沒被收回的就還是o
60、nResume就好了。savedInstanceState是一個(gè)Bundle對(duì)象,你基本上可以把他理解為系統(tǒng)幫你維護(hù)的一個(gè)Map對(duì)象。在onCreate()里你可能會(huì)用到它,如果正常啟動(dòng)onCreate就不會(huì)有它,所以用的時(shí)候要判斷一下是否為空。Java代碼1. if(savedInstanceState != null)2. long id = savedInstanceState.getLong("id");3. if(savedInstanceState != null)long id = savedInstanceState.getLong("id&quo
61、t;);就像官方的Notepad教程 里的情況,你正在編輯某一個(gè)note,突然被中斷,那么就把這個(gè)note的id記住,再起來的時(shí)候就可以根據(jù)這個(gè)id去把那個(gè)note取出來,程序就完整一些。這也是看你的應(yīng)用需不需要保存什么,比如你的界面就是讀取一個(gè)列表,那就不需要特殊記住什么,哦, 沒準(zhǔn)你需要記住滾動(dòng)條的位置.12、 調(diào)用與被調(diào)用:我們的通信使者Intent要說Intent了,Intent就是這個(gè)這個(gè)意圖 ,應(yīng)用程序間Intent進(jìn)行交流,打個(gè)電話啦,來個(gè) 電話啦都會(huì)發(fā)Intent, 這個(gè)是Android架構(gòu)的松耦合的精髓部分,大大提高了組件的復(fù)用性,比如你要在你的應(yīng)用程序中點(diǎn)擊按鈕,給某人打電話,很簡單啊,看下代碼先: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等.壓縮文件請(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校防靜電地板優(yōu)化方案
- 聯(lián)通網(wǎng)格經(jīng)理工作總結(jié)與創(chuàng)新思路
- 智能家居系統(tǒng)試運(yùn)行方案
- 環(huán)保事故應(yīng)急處置方案
- 2024-2025學(xué)年黑龍江省哈爾濱三中高三上學(xué)期10月月考英語試題及答案
- 雨污水管網(wǎng)改造施工方案
- 設(shè)計(jì)總監(jiān)崗位招聘筆試題與參考答案(某世界500強(qiáng)集團(tuán))2024年
- 寫字樓電梯使用應(yīng)急預(yù)案
- 廣告崗位招聘面試題與參考回答2024年
- 學(xué)直播:網(wǎng)絡(luò)直播場域中農(nóng)村女主播的數(shù)字實(shí)踐
- 設(shè)備文件-hpsp0630禾望逆變器說明書
- 心肺交互作用-
- 遼寧省沈陽市藥品零售藥店企業(yè)藥房名單目錄
- 校園文化建設(shè)方案(共60張PPT)
- 學(xué)校三年發(fā)展規(guī)劃落實(shí)情況評(píng)估報(bào)告(通用3篇)
- 人教版二年級(jí)數(shù)學(xué)上冊(cè)第六單元《表內(nèi)乘法(二)》單元分析(學(xué)校集體備課)
- 兩家公司關(guān)系證明公函
- 婦女保健科圍絕經(jīng)期保健門診工作制度
- 胡援成《貨幣銀行學(xué)》(第4版)筆記和課后習(xí)題(含考研真題)詳解
- 初中生物人教八年級(jí)上冊(cè)(2023年更新) 生物圈中的其他生物《細(xì)菌》導(dǎo)學(xué)案
- 文化遺產(chǎn)導(dǎo)論 教學(xué)大綱
評(píng)論
0/150
提交評(píng)論