分享一下最近面試幾家大型公司的android面試題目_第1頁
分享一下最近面試幾家大型公司的android面試題目_第2頁
分享一下最近面試幾家大型公司的android面試題目_第3頁
分享一下最近面試幾家大型公司的android面試題目_第4頁
分享一下最近面試幾家大型公司的android面試題目_第5頁
免費預覽已結(jié)束,剩余9頁可下載查看

下載本文檔

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

文檔簡介

1、分享一下近來面試幾家大型公司的android面試和java筆試題目供應1.下面這樣寫法有問題嗎,問題出現(xiàn)在哪,Listlist=item;Stringitem=list0;3Setset=item;Mapmap=key:1;7intvalue=mapkey;答案是沒有問題,是java7新增加的新特點2.switch中使用string這樣寫法有問題嗎1Strings=.2switch(s)3casequux:4processQuux(s);5/fall-through6casefoo:7casebar:8processFooOrBar(s);9break;10casebaz:11processB

2、az(s);12/fall-through13default:14processDefault(s);15break;16這個問題是我在Java中不喜歡用switch的原因之一,以前在switch中只能使用number或enum?,F(xiàn)在能夠使用string了,哈哈,不錯,贊個!3:下面程序的運行結(jié)果是:()publicstaticvoidmain(Stringargs)Threadt=newThread()publicvoidrun()pong();t.run();System.out.print(ping);staticvoidpong()System.out.print(pong);Apin

3、gpongBpongpingCpingpong和pongping都有可能D都不輸出答案:B剖析:這里考的是Thread類中start()和run()方法的差別了。start()用來啟動一個線程,當調(diào)用start方法后,系統(tǒng)才會開啟一個新的線程,進而調(diào)用run()方法來執(zhí)行任務,而單獨的調(diào)用run()就跟調(diào)用一般方法是同樣的,已經(jīng)失去線程的特點了。因此在啟動一個線程的時候必然要使用start()而不是run()。4:下面程序的運行結(jié)果是什么()classHelloApublicHelloA()System.out.println(HelloA);System.out.println(ImAcla

4、ss);staticSystem.out.println(staticA);publicclassHelloBextendsHelloApublicHelloB()System.out.println(HelloB);System.out.println(ImBclass);staticSystem.out.println(staticB);publicstaticvoidmain(Stringargs)newHelloB();答案:staticAstaticBImAclassHelloAImBclassHelloB剖析:說實話我感覺這題很好,察看靜態(tài)語句塊、構(gòu)造語句塊(就是只有大括號的那塊)

5、以及構(gòu)造函數(shù)的執(zhí)行序次。對象的初始化序次:(1)類加載此后,按從上到下(從父類到子類)執(zhí)行被static修飾的語句;(2)當static語句執(zhí)行完此后,再執(zhí)行main方法;(3)若是有語句new了自己的對象,將從上到下執(zhí)行構(gòu)造代碼塊、構(gòu)造器(兩者能夠說綁定在一起)。5:java基礎題目察看inta=1;intm1=+a+3;結(jié)果:m1=5;a=2;+a表示先賦值6:下面程序的運行結(jié)果是()Stringstr1=hello;Stringstr2=he+newString(llo);System.err.println(str1=str2);答案:false剖析:因為str2中的llo是新申請的內(nèi)

6、存塊,而=判斷的是對象的地址而非值,因此不同樣。若是是Stringstr2.equals(str1),那么就是true了。7:下面程序的運行結(jié)果:()publicstaticvoidmain(Stringargs)Threadt=newThread()publicvoidrun()pong();t.run();System.out.print(ping);staticvoidpong()System.out.print(pong);ApingpongBpongpingCpingpong和pongping都有可能D都不輸出答案:B剖析:這里考的是Thread類中start()和run()方法的差

7、別了。start()用來啟動一個線程,當調(diào)用start方法后,系統(tǒng)才會開啟一個新的線程,進而調(diào)用run()方法來執(zhí)行任務,而單獨的調(diào)用run()就跟調(diào)用一般方法是同樣的,已經(jīng)失去線程的特點了。因此在啟動一個線程的時候必然要使用start()而不是run()。8.如何啟用Service,如何停用Service。Android中的service近似于windows中的service,service一般沒適用戶操作界面,它運行于系統(tǒng)中不簡單被用戶察覺,能夠使用它開發(fā)如監(jiān)控之類的程序。一。步驟第一步:繼承Service類publicclassSMSServiceextendsService第二步:在A

8、ndroidManifest.xml文件中的節(jié)點里對服務進行配置:二。Context.startService()和Context.bindService服務不能夠自制運行,需要經(jīng)過調(diào)用Context.startService()或Context.bindService()方法啟動服務。這兩個方法都能夠啟動Service,可是它們的使用途合有所不一樣。1.使用startService()方法啟用服務,調(diào)用者與服務之間沒相關(guān)系,即使調(diào)用者退出了,服務依舊運行。使用bindService()方法啟用服務,調(diào)用者與服務綁定在了一起,調(diào)用者一旦退出,服務也就停止。2.采用Context.startSe

9、rvice()方法啟動服務,在服務未被創(chuàng)辦時,系統(tǒng)會先調(diào)用服務的onCreate()方法,接著調(diào)用onStart()方法。若是調(diào)用startService()方法前服務已經(jīng)被創(chuàng)辦,多次調(diào)用startService()方法并不會以致多次創(chuàng)辦服務,但會以致多次調(diào)用onStart()方法。采用startService()方法啟動的服務,只能調(diào)用Context.stopService()方法結(jié)束服務,服務結(jié)束時會調(diào)用onDestroy()方法。3.采用Context.bindService()方法啟動服務,在服務未被創(chuàng)辦時,系統(tǒng)會先調(diào)用服務的onCreate()方法,接著調(diào)用onBind()方法。這個

10、時候調(diào)用者和服務綁定在一起,調(diào)用者退出了,系統(tǒng)就會先調(diào)用服務的onUnbind()方法,。接著調(diào)用onDestroy()方法。若是調(diào)用bindService()方法前服務已經(jīng)被綁定,多次調(diào)用bindService()方法其實不會以致多次創(chuàng)辦服務及綁定(也就是說onCreate()和onBind()方法其實不會被多次調(diào)用)。若是調(diào)用者希望與正在綁定的服務清除綁定,能夠調(diào)用unbindService()方法,調(diào)用該方法也會以致系統(tǒng)調(diào)用服務的onUnbind()-onDestroy()方法。三。Service的生命周期1.Service常用生命周期回調(diào)方法以下:onCreate()該方法在服務被創(chuàng)辦

11、時調(diào)用,該方法只會被調(diào)用一次,無論調(diào)用多少次startService()或bindService()方法,服務也只被創(chuàng)辦一次。onDestroy()該方法在服務被停止時調(diào)用。2.Context.startService()啟動Service相關(guān)的生命周期方法onStart()只有采用Context.startService()方法啟動服務時才會回調(diào)該方法。該方法在服務開始運行時被調(diào)用。多次調(diào)用startService()方法盡管不會多次創(chuàng)辦服務,但onStart()方法會被多次調(diào)用。3.Context.bindService()啟動Service相關(guān)的生命周期方法onBind()只有采用Con

12、text.bindService()方法啟動服務時才會回調(diào)該方法。該方法在調(diào)用者與服務綁準時被調(diào)用,當調(diào)用者與服務已經(jīng)綁定,多次調(diào)用Context.bindService()方法其實不會以致該方法被多次調(diào)用。onUnbind()只有采用Context.bindService()方法啟動服務時才會回調(diào)該方法。該方法在調(diào)用者與服務清除綁準時被調(diào)用。備注:1.采用startService()啟動服務Intentintent=newIntent(DemoActivity.this,DemoService.class);startService(intent);()啟動Intentintent=newI

13、ntent(DemoActivity.this,DemoService.class);bindService(intent,conn,Context.BIND_AUTO_CREATE);/unbindService(conn);/清除綁定如何退出Activity?如何安全退出已調(diào)用多個Activity的Application?對于單一Activity的應用來說,退出很簡單,直接finish()即可。自然,也能夠用killProcess()和System.exit()這樣的方法??墒?,對于多Activity的應用來說,在打開多個Activity后,若是想在最后打開的Activity直接退出,上邊

14、的方法都是沒適用的,因為上邊的方法都是結(jié)束一個Activity而已。自然,網(wǎng)上也有人說能夠。就憂若有人問,在應用里如何捕獲Home鍵,有人就會說用keyCode比較KEYCODE_HOME即可,而事實上若是不更正framework,根本不能能做到這一點同樣。因此,最好還是自己親自試一試看。那么,有沒有方法直接退出整個應用呢?在2.1以前,能夠使用ActivityManager的restartPackage方法。它能夠直接結(jié)束整個應用。在使用時需要權(quán)限。注意不要被它的名字迷惑??墒?,在2.2,這個方法無效了。在2.2增加了一個新的方法,killBackgroundProcesses(),需要權(quán)限

15、。痛惜的是,它和2.2的restartPackage同樣,根本起不到應有的收效。別的還有一個方法,就是系統(tǒng)自帶的應用程序管理里,逼迫結(jié)束程序的方法,forceStopPackage()。它需要權(quán)限。而且需要增加android:sharedUserId=android.uid.system屬性同樣痛惜的是,該方法是非公開的,他只能運行在系統(tǒng)進度,第三方程序無法調(diào)用。因為需要在Android.mk中增加LOCAL_CERTIFICATE:=platform。而Android.mk是用于在Android源碼下編譯程序用的。從以上能夠看出,在2.2,沒有方法直接結(jié)束一個應用,而只能用自己的方法間接手到

16、?,F(xiàn)供應幾個方法,供參照:1、拋異常逼迫退出:該方法經(jīng)過拋異常,使程序ForceClose??紦?jù)能夠,可是,需要解決的問題是,如何使程序結(jié)束掉,而不彈出ForceClose的窗口。2、記錄打開的Activity:每打開一個Activity,就記錄下來。在需要退出時,關(guān)閉每一個Activity即可。3、發(fā)送特定廣播:在需要結(jié)束應用時,發(fā)送一個特定的廣播,每個Activity收到廣播后,關(guān)閉即可。4、遞歸退出在打開新的Activity時使用startActivityForResult,爾后自己加標志,在onActivityResult中辦理,遞歸關(guān)閉。除了第一個,都是想方法把每一個Activity

17、都結(jié)束掉,間接達到目的??墒沁@樣做同樣不圓滿。你會發(fā)現(xiàn),若是自己的應用程序?qū)γ恳粋€Activity都設置了nosensor,在兩個Activity結(jié)束的縫隙,sensor可能有效了。但最少,我們的目的達到了,而且沒有影響用戶使用。為了編程方便,最好定義一個Activity基類,辦理這些共通問題。10.請講解下在單線程模型中Message、Handler、MessageQueue、Looper之間的關(guān)系。Handler簡介:一個Handler贊同你發(fā)送和辦理Message和Runable對象,這些對象和一個線程的MessageQueue相關(guān)系。每一個線程實例和一個單獨的線程以及該線程的Messa

18、geQueue相關(guān)系。當你創(chuàng)辦一個新的Handler時,它就和創(chuàng)辦它的線程綁定在一起了。這里,線程我們也能夠理解為線程的MessageQueue。從這一點上來看,Handler把Message和Runable對象傳達給MessageQueue,而且在這些對象走開MessageQueue時,Handler負責執(zhí)行他們。Handler有兩個主要的用途:(1)確定在將來的某個時間點執(zhí)行一個也許一些Message和Runnable對象。(2)在其他線程(不是Handler綁定線程)中排入一些要執(zhí)行的動作。SchedulingMessage,即(1),能夠經(jīng)過以下方法完成:post(Runnable):

19、Runnable在handler綁定的線程上執(zhí)行,也就是說不創(chuàng)辦新線程。postAtTime(Runnable,long):postDelayed(Runnable,long):sendEmptyMessage(int):sendMessage(Message):sendMessageAtTime(Message,long):sendMessageDelayed(Message,long):post這個動作讓你把Runnable對象排入MessageQueue,MessageQueue碰到這些信息的時候執(zhí)行他們,自然以必然的排序。sendMessage這個動作贊同你把Message對象排成隊列

20、,這些Message對象包含一些信息,Handler的hanlerMessage(Message)會辦理這些Message.自然,handlerMessage(Message)必定由Handler的子類來重寫。這是編程人員需要作的事。當posting也許sending到一個Hanler時,你能夠有三種行為:當MessageQueue準備好就辦理,定義一個延緩時間,定義一個精確的時間去辦理。后兩者贊同你實現(xiàn)timeout,tick,和基于時間的行為。當你的應用創(chuàng)辦一個新的進度時,主線程(也就是UI線程)自帶一個MessageQueue,這個MessageQueue管理頂層的應用對象(像activities,broadcastreceivers等)和主線程創(chuàng)辦的窗體。你能夠創(chuàng)辦自己的線程,并經(jīng)過一個Handler和主線程進行通信。這和以前同樣,通過post和sendmessage來完成,差別在于在哪一個線程中執(zhí)行這么方法。在合適的時候,給定的Runnable和Message將在Handler的MessageQueue中被Scheduled。Message簡介:Message類就是定義了一個信息,這個信息中包含一個描述符和任意的數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論