android面試題 不單單為了面試也是一次很好的學(xué)習(xí)_第1頁(yè)
android面試題 不單單為了面試也是一次很好的學(xué)習(xí)_第2頁(yè)
android面試題 不單單為了面試也是一次很好的學(xué)習(xí)_第3頁(yè)
android面試題 不單單為了面試也是一次很好的學(xué)習(xí)_第4頁(yè)
android面試題 不單單為了面試也是一次很好的學(xué)習(xí)_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、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è)dalivk虛擬機(jī)實(shí)例。而每一個(gè)dvm都是在linux的一個(gè)進(jìn)程。所以說(shuō)可以認(rèn)為是同一個(gè)概念。2.android的動(dòng)畫(huà)有哪幾種?他們的特點(diǎn)和區(qū)別是什么?答:兩種,一種是tween動(dòng)畫(huà),一種是frame動(dòng)畫(huà)。tween動(dòng)畫(huà),這種實(shí)現(xiàn)方式可以使視圖組件移動(dòng),放大或縮小以及產(chǎn)生透明度的變化。frame動(dòng)畫(huà),傳統(tǒng)的動(dòng)畫(huà)方法,通過(guò)順序的播放排列好的圖片來(lái)實(shí)現(xiàn),類似電影。3.handler進(jìn)制的原理:答:android提供了han

2、dler和looper來(lái)滿足線程間的通信。Handler先進(jìn)先出原則。looper用來(lái)管理特定線程內(nèi)對(duì)象之間的消息交換(message Exchange).    1)looper:一個(gè)線程可以產(chǎn)生一個(gè)looper對(duì)象,由它來(lái)管理此線程里的message queue(消息隊(duì)列)   2)handler:你可以構(gòu)造一個(gè)handler對(duì)象來(lái)與looper溝通,以便push新消息到messagequeue里;或者接收l(shuí)ooper(從messagequeue里取出)所送來(lái)的消息。    3)messagequeu

3、e:用來(lái)存放線程放入的消息。    4)線程:UI thread 通常就是main thread,而android啟動(dòng)程序時(shí)會(huì)為它建立一個(gè)message queue.4.android view的刷新:答:Android中對(duì)View的更新有很多種方式,使用時(shí)要區(qū)分不同的應(yīng)用場(chǎng)合。我感覺(jué)最要緊的是分清:多線程和雙緩沖的使用情況。    1).不使用多線程和雙緩沖   這種情況最簡(jiǎn)單了,一般只是希望在View發(fā)生改變時(shí)對(duì)UI進(jìn)行重繪。你只需在Activity中顯式地調(diào)用View對(duì)象中的invalidate()方法即可。

4、系統(tǒng)會(huì)自動(dòng)調(diào)用 View的onDraw()方法。    2).使用多線程和不使用雙緩沖    這種情況需要開(kāi)啟新的線程,新開(kāi)的線程就不好訪問(wèn)View對(duì)象了。強(qiáng)行訪問(wèn)的話會(huì)報(bào):android.view.ViewRoot$CalledFromWrongThreadException:Only the originalthread that created a view hierarchy can touch its views.    這時(shí)候你需要?jiǎng)?chuàng)建一個(gè)繼承了android.os.Handler的子類,并重

5、寫(xiě)handleMessage(Messagemsg)方法。android.os.Handler是能發(fā)送和處理消息的,你需要在Activity中發(fā)出更新UI的消息,然后再你的Handler(可以使用匿名內(nèi)部類)中處理消息(因?yàn)槟涿麅?nèi)部類可以訪問(wèn)父類變量,你可以直接調(diào)用View對(duì)象中的invalidate()方法 )。也就是說(shuō):在新線程創(chuàng)建并發(fā)送一個(gè)Message,然后再主線程中捕獲、處理該消息。    3).使用多線程和雙緩沖    Android中SurfaceView是View的子類,她同時(shí)也實(shí)現(xiàn)了雙緩沖。你可以定義一個(gè)她的子類并實(shí)

6、現(xiàn)SurfaceHolder.Callback接口。由于實(shí)現(xiàn)SurfaceHolder.Callback接口,新線程就不需要android.os.Handler幫忙了。SurfaceHolder中l(wèi)ockCanvas()方法可以鎖定畫(huà)布,繪制玩新的圖像后調(diào)用unlockCanvasAndPost(canvas)解鎖(顯示),還是比較方便得。 5.說(shuō)說(shuō)mvc模式的原理,它在android中的運(yùn)用:答:android的官方建議應(yīng)用程序的開(kāi)發(fā)采用mvc模式。何謂mvc? mvc是model,view,controller的縮寫(xiě),mvc包含三個(gè)部分: l模型(model)

7、對(duì)象:是應(yīng)用程序的主體部分,所有的業(yè)務(wù)邏輯都應(yīng)該寫(xiě)在該層。2視圖(view)對(duì)象:是應(yīng)用程序中負(fù)責(zé)生成用戶界面的部分。也是在整個(gè)mvc架構(gòu)中用戶唯一可以看到的一層,接收用戶的輸入,顯示處理結(jié)果。3控制器(control)對(duì)象:是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示及更新model對(duì)象狀態(tài)的部分,控制器更重要的一種導(dǎo)航功能,想用用戶出發(fā)的相關(guān)事件,交給m哦得了處理。 android鼓勵(lì)弱耦合和組件的重用,在android中mvc的具體體現(xiàn)如下:    1)視圖層(view):一般采用xml文件進(jìn)行界面的描述,使用的時(shí)候可以非常方便的引入,當(dāng)然,如何你對(duì)an

8、droid了解的比較的多了話,就一定 可以想到在android中也可以使用javascript+html等的方式作為view層,當(dāng)然這里需要進(jìn)行java和javascript之間的通 信,幸運(yùn)的是,android提供了它們之間非常方便的通信實(shí)現(xiàn)。2)控制層(controller):android的控制層的重 任通常落在了眾多的acitvity的肩上,這句話也就暗含了不要在acitivity中寫(xiě)代碼,要通過(guò)activity交割model業(yè)務(wù)邏輯層處理, 這樣做的另外一個(gè)原因是android中的acitivity的響應(yīng)時(shí)間是5s,如果耗時(shí)的操作放在這里,程序就很容易被回收掉。3)模型層(model

9、):對(duì)數(shù)據(jù)庫(kù)的操作、對(duì)網(wǎng)絡(luò)等的操作都應(yīng)該在model里面處理,當(dāng)然對(duì)業(yè)務(wù)計(jì)算等操作也是必須放在的該層的。 6.Activity的生命周期:答:onCreate: 在這里創(chuàng)建界面,做一些數(shù)據(jù) 的初始化工作 onStart: 到這一步變成用戶可見(jiàn)不可交互的    onResume:變成和用戶可交互 的,(在activity 棧系統(tǒng)通過(guò)棧的方式管理這些個(gè)Activity的最上面,運(yùn)行完彈出棧,則回到上一個(gè)Activity)onPause: 到這一步是可見(jiàn)但不可交互的,系統(tǒng)會(huì)停止動(dòng)畫(huà) 等消耗CPU 的事情從上文的描述已經(jīng)知道,應(yīng)該在這里保存你的一些數(shù)據(jù)

10、,因?yàn)檫@個(gè)時(shí)候你的程序的優(yōu)先級(jí)降低,有可能被系統(tǒng)收回。在這里保存的數(shù)據(jù),應(yīng)該在onstop: 變得不可見(jiàn),被下一個(gè)activity覆蓋了onDestroy: 這是activity被干掉前最后一個(gè)被調(diào)用方法了,可能是外面類調(diào)用finish方法或者是系統(tǒng)為了節(jié)省空間將它暫時(shí)性的干掉 7.讓Activity變成一個(gè)窗口:答:Activity屬性設(shè)定:有時(shí)候會(huì)做個(gè)應(yīng)用程序是漂浮在手機(jī)主界面的。這個(gè)只需要在設(shè)置下Activity的主題theme,即在Manifest.xml定義Activity的地方加一句:android :theme="android:style/Theme.Dia

11、log"如果是作半透明的效果:android:theme="android:style/Theme.Translucent"8.Android中常用的五種布局:答:LinearLayout線性布局;AbsoluteLayout絕對(duì)布局;TableLayout表格布局;RelativeLayout相對(duì)布局;FrameLayout幀布局;9.Android的五種數(shù)據(jù)存儲(chǔ)方式:答:sharedPreferences;文件;SQLite;contentProvider;網(wǎng)絡(luò)10.請(qǐng)解釋下在單線程模型中Message、Handler、Message Queue、Looper

12、之間的關(guān)系:答:Handler獲取當(dāng)前線程中的looper對(duì)象,looper用來(lái)從存有Message的Message Queue里取出message,再由Handler進(jìn)行message的分發(fā)和處理。11.AIDL的全稱是什么?如何工作?能處理哪些類型的數(shù)據(jù)?答:AIDL(AndroidInterface Definition Language)android接口描述語(yǔ)言12.系統(tǒng)上安裝了多種瀏覽器,能否指定某瀏覽器訪問(wèn)指定頁(yè)面?請(qǐng)說(shuō)明原由:答:通過(guò)直接發(fā)送Uri把參數(shù)帶過(guò)去,或者通過(guò)manifest里的intentfilter里的data屬性。代碼如下:   

13、Intent intent = new Intent();Intent.setAction(“ent.action.View”);Uri uriBrowsers = Uri.parse(“”);Intent.setData(uriBrowsers);/包名、要打開(kāi)的activity    intent.setClassName(“com.android.browser”,”com.android.browser.BrowserActivity”);startActivity(intent);13.什么是ANR,如何避免?答:ANR的定義:在a

14、ndroid上,如果你的應(yīng)用程序有一段時(shí)間響應(yīng)不移靈敏,系統(tǒng)會(huì)向用戶提示“應(yīng)用程序無(wú)響應(yīng)”(ANR:application Not Responding)對(duì)話框。因此,在程序里對(duì)響應(yīng)性能的設(shè)計(jì)很重要,這樣,系統(tǒng)不會(huì)顯示ANR給用戶。如何避免:首先來(lái)研究下為什么它會(huì)在android的應(yīng)用程序里發(fā)生和如何最佳構(gòu)建應(yīng)用程序來(lái)避免ANR.    android應(yīng)用程序通常是運(yùn)行在一個(gè)單獨(dú)的線程(例如:main)里,這就意味你的應(yīng)用程序所做的事情如果在主線程里占用了大長(zhǎng)時(shí)間的話,就會(huì)引發(fā)ANR對(duì)話框,因?yàn)槟愕膽?yīng)用程序并沒(méi)有給自己機(jī)會(huì)來(lái)處理輸入事件或者Intent廣播。

15、60;   因此,運(yùn)行在主線程里的任何訪求都盡可能少做事情。特別是,activity應(yīng)該在它的關(guān)鍵生命周期方法(onCreate()和onResume())里盡可能少的去作創(chuàng)建操作。潛在的耗時(shí)操作,例如網(wǎng)絡(luò)或數(shù)據(jù)庫(kù)操作,或者高耗時(shí)的計(jì)算如改變位圖尺寸,應(yīng)該在子線程里(或者以數(shù)據(jù)庫(kù)操作為例,通過(guò)異步請(qǐng)求的方式)來(lái)完成。然而,不是說(shuō)你的主線程阻塞在那里等待子線程的完成-也不是調(diào)用Thread.wait()或者Thread.sleep()。替代的方法是:主線程應(yīng)該為子線程提供一個(gè)Handler,以便完成時(shí)能夠提交給主線程。以這種方式設(shè)計(jì)你的應(yīng)用程序,將能保證你的主線程保持對(duì)輸入的

16、響應(yīng)性并能避免由5秒輸入事件的超時(shí)引發(fā)的ANR對(duì)話框。這種做法應(yīng)該在其它顯示UI的線程里效仿,因?yàn)樗鼈兌际芟嗤某瑫r(shí)影響。    IntentReceiver執(zhí)行時(shí)間的特殊限制意味著它應(yīng)該做:在后臺(tái)里做小的、瑣碎的工作,如保存設(shè)定或注冊(cè)一個(gè)Notification。和在主線程里調(diào)用的其它方法一樣,應(yīng)用程序應(yīng)該避免在BroadcastReceiver里做耗時(shí)的操作或計(jì)算,但也不是在子線程里做這些任務(wù)(因?yàn)锽roadcastReceiver的生命周期短),替代的是,如果響應(yīng)Intent廣播需要執(zhí)行一個(gè)耗時(shí)的動(dòng)作的話,應(yīng)用程序應(yīng)該啟動(dòng)一個(gè)Service。順便提及一句,你

17、也應(yīng)該避免在Intent Receiver里啟動(dòng)一個(gè)Activity,因?yàn)樗鼤?huì)創(chuàng)建一個(gè)新的畫(huà)面,并從當(dāng)前用戶正在運(yùn)行的程序上搶奪焦點(diǎn)。如果你的應(yīng)用程序在響應(yīng)Intent廣播時(shí)需要向用戶展示什么,你應(yīng)該使用Notification Manager來(lái)實(shí)現(xiàn)。    一般來(lái)說(shuō),在應(yīng)用程序里,100到200ms是用戶能感知阻滯的時(shí)間閾值,下面總結(jié)了一些技巧來(lái)避免ANR,并有助于讓你的應(yīng)用程序看起來(lái)有響應(yīng)性。    如果你的應(yīng)用程序?yàn)轫憫?yīng)用戶輸入正在后臺(tái)工作的話,可以顯示工作的進(jìn)度(ProgressBar和ProgressDialog對(duì)這種情況來(lái)

18、說(shuō)很有用)。特別是游戲,在子線程里做移動(dòng)的計(jì)算。如果你的程序有一個(gè)耗時(shí)的初始化過(guò)程的話,考慮可以顯示一個(gè)Splash Screen或者快速顯示主畫(huà)面并異步來(lái)填充這些信息。在這兩種情況下,你都應(yīng)該顯示正在進(jìn)行的進(jìn)度,以免用戶認(rèn)為程序被凍結(jié)了。 14.什么情況會(huì)導(dǎo)致Force Close?如何避免?能否捕獲導(dǎo)致其的異常?答:如空指針等可以導(dǎo)致ForceClose;可以看Logcat,然后找到對(duì)應(yīng)的程序代碼來(lái)解決錯(cuò)誤。15.橫豎屏切換時(shí)候的activity的生命周期:答:1) 新建一個(gè)activity,并把各個(gè)生命周期打印出來(lái)2) 運(yùn)行activity,得到如下信息:onCreate()&

19、#224;onStart()àonResume()à    3)  按ctrl+F12切換成橫屏?xí)r        onSaveInstanceState()à        onPause()à        onStop()à       

20、; onDestroy()à        onCreate()à        onStart()à        onRestoreInstanceState()à        onResume()à    4)  再按ct

21、rl+f12切換成豎屏?xí)r,發(fā)現(xiàn)打印了兩次相同的Log        onSaveInstanceState()à        onPause()à        onStop()à        onDestroyà     &

22、#160;  onCreate()à        onStart()à        onRestoreInstanceState()à        onResume()à         onSaveInstanceState()à 

23、       onPause()à        onStop()à        onDestroyà        onCreate()à        onStart()à  

24、0;     onRestoreInstanceState()à        onResume()à    5)  修改AndroidManifest.xml,把該Activity添加android:configChanges=“orientation”,執(zhí)行步驟3        onSaveInstanceState()à  

25、;      onPause()à        onStop()à        onDestroy()à        onCreate()à        onStart()à   &

26、#160;    onRestoreInstanceState()à        onResume()à    6)  修改AndroidManifest.xml,把該Activity添加android:configChanges=“orientation”,執(zhí)行步驟4,發(fā)現(xiàn)不會(huì)再打印相同信息,但多打印了一行onConfigChanged        onSave

27、InstanceState()à        onPause()à        onStop()à        onDestroy()à        onCreate()à        on

28、Start()à        onRestoreInstanceState()à        onResume()à        onConfigurationChanged()à    7)  把步驟5的android:configChanges=“orientation”改成android:conf

29、igChanges=“orientation|keyboradHidden”,執(zhí)行步驟3,就只打印onConfigChanged        onConfigurationChanged()à    8)  把步驟5的android:configChanges=“orientation”改成android:configChanges=“orientation|keyboradHidden”,執(zhí)行步驟4      &

30、#160; onConfigurationChanged()à        onConfigurationChanged()à    總結(jié):1) 不設(shè)置activity的android:configChanges時(shí),切屏?xí)匦抡{(diào)用各個(gè)生命周期,切橫屏?xí)r會(huì)執(zhí)行一次,切豎屏?xí)r會(huì)執(zhí)行兩次。2) 設(shè)置activity的android:configChanges=“orientation”時(shí), 切屏?xí)匦抡{(diào)用各個(gè)生命周期,切橫屏、豎屏?xí)r都只會(huì)執(zhí)行一次,但是豎屏最后多打印一條onCon

31、figurationChanged()3) 設(shè)置activity的android:configChanges=“orientation|keyboardHidden”時(shí),切屏不會(huì)重新調(diào)用各個(gè)生命周期,只會(huì)執(zhí)行onConfigurationChanged(),橫屏一次,豎屏兩次再總結(jié)下整個(gè)activity的生命周期:1)  當(dāng)前activity產(chǎn)生事件彈出Toast和AlertDialog的時(shí)候Activity的生命周期不會(huì)有改變2)  Activity運(yùn)行時(shí)按下HOME鍵(跟被完全覆蓋一樣的)onSavaInstanceStateàonPauseàonS

32、topà onRestartàonStartàonResumeà    3)  未被完全覆蓋,只是失去焦點(diǎn):        onPauseà        onResumeà16.如何將SQLite數(shù)據(jù)庫(kù)(.db文件)與apk文件一起發(fā)布?答:可以將.db文件復(fù)制到Eclipse Android工程中的res aw目錄中。所有在res aw目錄中的

33、文件不會(huì)被壓縮,這樣可以直接提取該目錄中的文件??梢詫?db文件復(fù)制到res aw目錄中17.如何將打開(kāi)res aw目錄中的數(shù)據(jù)庫(kù)文件?答:在Android中不能直接打開(kāi)res aw目錄中的數(shù)據(jù)庫(kù)文件,而需要在程序第一次啟動(dòng)時(shí)將該文件復(fù)制到手機(jī)內(nèi)存或SD卡的某個(gè)目錄中,然后再打開(kāi)該數(shù)據(jù)庫(kù)文件。復(fù)制的基本方法是使用getResources().openRawResource方法獲得res aw目錄中資源的 InputStream對(duì)象,然后將該InputStream對(duì)象中的數(shù)據(jù)寫(xiě)入其他的目錄中相應(yīng)文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDat

34、abase方法來(lái)打開(kāi)任意目錄中的SQLite數(shù)據(jù)庫(kù)文件。18.android 中有哪幾種解析xml的類?官方推薦哪種?以及它們的原理和區(qū)別:答:XML解析主要有三種方式,SAX、DOM、PULL。常規(guī)在PC上開(kāi)發(fā)我們使用Dom相對(duì)輕松些,但一些性能敏感的數(shù)據(jù)庫(kù)或手機(jī)上還是主要采用SAX方 式,SAX讀取是單向的,優(yōu)點(diǎn):不占內(nèi)存空間、解析屬性方便,但缺點(diǎn)就是對(duì)于套嵌多個(gè)分支來(lái)說(shuō)處理不是很方便。而DOM方式會(huì)把整個(gè)XML文件加載到內(nèi)存 中去,這里Android開(kāi)發(fā)網(wǎng)提醒大家該方法在查找方面可以和XPath很好的結(jié)合如果數(shù)據(jù)量不是很大推薦使用,而PULL常常用在J2ME對(duì)于節(jié)點(diǎn)處 理比較好,類似SA

35、X方式,同樣很節(jié)省內(nèi)存,在J2ME中我們經(jīng)常使用的KXML庫(kù)來(lái)解析。19.DDMS和TraceView的區(qū)別?答:DDMS是一個(gè)程序執(zhí)行查看器,在里面可以看見(jiàn)線程和堆棧等信息,TraceView是程序性能分析器20.談?wù)凙ndroid的IPC機(jī)制:答:IPC是內(nèi)部進(jìn)程通信的簡(jiǎn)稱,是共享"命名管道"的資源。Android中的IPC機(jī)制是為了讓Activity和Service之間可以隨時(shí)的進(jìn)行交互,故在Android中該機(jī)制,只適用于Activity和Service之間的通信,類似于遠(yuǎn)程方法調(diào)用,類似于C/S模式的訪問(wèn)。通過(guò)定義AIDL接口文件來(lái)定義IPC接口。Servier端

36、實(shí)現(xiàn)IPC接口,Client端調(diào)用IPC接口本地代理。21.NDK是什么:答:NDK是一系列工具的集合    NDK提供了一系列的工具,幫助開(kāi)發(fā)者迅速的開(kāi)發(fā)C/C+的動(dòng)態(tài)庫(kù),并能自動(dòng)將so和java應(yīng)用打成apk包    NDK集成了交叉編譯器,并提供了相應(yīng)的mk文件和隔離cpu,平臺(tái)等的差異,開(kāi)發(fā)人員只需簡(jiǎn)單的修改mk文件就可以創(chuàng)建出so22.描述一下android的系統(tǒng)架構(gòu):答:android系統(tǒng)架構(gòu)分從下往上為L(zhǎng)inux內(nèi)核層、運(yùn)行庫(kù)、應(yīng)用程序框架層和應(yīng)用程序?qū)印?#160;   Linux內(nèi)核層:負(fù)責(zé)硬件的

37、驅(qū)動(dòng)程序、網(wǎng)絡(luò)、電源、系統(tǒng)安全以及內(nèi)存管理等功能。運(yùn)行庫(kù)和androidruntion:運(yùn)行庫(kù):即c/c+函數(shù)庫(kù)部分,大多數(shù)都是開(kāi)放源代碼的函數(shù)庫(kù),例如webkit,該函數(shù)庫(kù)負(fù)責(zé)android網(wǎng)頁(yè)瀏覽器的運(yùn)行;例如標(biāo)準(zhǔn)的c函數(shù)庫(kù)libc、openssl、sqlite等,當(dāng)然也包括支持游戲開(kāi)發(fā)的2dsgl和3dopengles,在多媒體方面有mediaframework框架來(lái)支持各種影音和圖形文件的播放與顯示,如mpeg4、h.264、mp3、aac、amr、jpg和png等眾多的多媒體文件格式。Androidruntion負(fù)責(zé)解釋和執(zhí)行生成的dalvik格式的字節(jié)碼應(yīng)用軟件架構(gòu):java應(yīng)用程

38、序開(kāi)發(fā)人員主要是使用該層封裝好的api進(jìn)行快速開(kāi)發(fā)的。應(yīng)用程序?qū)樱涸搶邮莏ava的應(yīng)用程序?qū)?,android內(nèi)置的googlemaps、email、IM、瀏覽器等,都處于該層,java開(kāi)發(fā)人員工發(fā)的程序也處于該層,而且和內(nèi)置的應(yīng)用程序具有平等的地位,可以調(diào)用內(nèi)置的應(yīng)用程序,也可以替換內(nèi)置的應(yīng)用程序23.Activity 與 Task的啟動(dòng)模式有哪些,它們含義具體是什么?答:在一個(gè)activity中,有多次調(diào)用startActivity來(lái)啟動(dòng)另一個(gè)activity,要想只生成一個(gè)activity實(shí)例,可以設(shè)置啟動(dòng)模式。    一個(gè)activity有四種啟動(dòng)模式:st

39、anded,signleTop,singleTask,singleInstance    Standed:標(biāo)準(zhǔn)模式,一調(diào)用startActivity()方法就會(huì)產(chǎn)生一個(gè)新的實(shí)例。    SingleTop:如果已經(jīng)有一個(gè)實(shí)例位于activity棧頂,就不產(chǎn)生新的實(shí)例,而只是調(diào)用activity中的newInstance()方法。如果不位于棧頂,會(huì)產(chǎn)生一個(gè)新的實(shí)例。    singleTask:會(huì)在一個(gè)新的task中產(chǎn)生這個(gè)實(shí)例,以后每次調(diào)用都會(huì)使用這個(gè),不會(huì)去產(chǎn)生新的實(shí)例了。  

40、60; SingleInstance:這個(gè)和singleTask基本一樣,只有一個(gè)區(qū)別:在這個(gè)模式下的activity實(shí)例所處的task中,只能有這個(gè)activity實(shí)例,不能有其他實(shí)例24.Application類的作用:答:API里的第一句是:Base class for those who need to maintain global application state 如果想在整個(gè)應(yīng)用中使用全局變量,在java中一般是使用靜態(tài)變量,public類型;而在android中如果使用這樣的全局變量就不符合Android的框架架構(gòu),但是可以使用一種更優(yōu)雅的方式就是使用Applica

41、tion context。   首先需要重寫(xiě)Application,主要重寫(xiě)里面的onCreate方法,就是創(chuàng)建的時(shí)候,初始化變量的值。然后在整個(gè)應(yīng)用中的各個(gè)文件中就可以對(duì)該變量進(jìn)行操作了。   啟動(dòng)Application時(shí),系統(tǒng)會(huì)創(chuàng)建一個(gè)PID,即進(jìn)程ID,所有的Activity就會(huì)在此進(jìn)程上運(yùn)行。那么我們?cè)贏pplication創(chuàng)建的時(shí)候初始化全局變量,同一個(gè)應(yīng)用的所有Activity都可以取到這些全局變量的值,換句話說(shuō),我們?cè)谀骋粋€(gè)Activity中改變了這些全局變量的值,那么在同一個(gè)應(yīng)用的其他Activity中值就會(huì)改變25.說(shuō)明onSaveIn

42、stanceState() 和 onRestoreInstanceState()在什么時(shí)候被調(diào)用:答:Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它們不同于 onCreate()、onPause()等生命周期方法,它們并不一定會(huì)被觸發(fā)。當(dāng)應(yīng)用遇到意外情況(如:內(nèi)存不足、用戶直接按Home鍵)由系統(tǒng)銷毀一個(gè)Activity時(shí),onSaveInstanceState()才會(huì)被調(diào)用。但是當(dāng)用戶主動(dòng)去銷毀一個(gè)Activity時(shí),例如在應(yīng)用中按返回鍵,onSaveInstanceState()就不會(huì)被調(diào)用。因?yàn)樵?/p>

43、這種情況下,用戶的行為決定了不需要保存Activity的狀態(tài)。通常onSaveInstanceState()只適合用于保存一些臨時(shí)性的狀態(tài),而onPause()適合用于數(shù)據(jù)的持久化保存。另外,當(dāng)屏幕的方向發(fā)生了改變, Activity會(huì)被摧毀并且被重新創(chuàng)建,如果你想在Activity被摧毀前緩存一些數(shù)據(jù),并且在Activity被重新創(chuàng)建后恢復(fù)緩存的數(shù)據(jù)。可以重寫(xiě)Activity的 onSaveInstanceState() 和 onRestoreInstanceState()方法。26.android的service的生命周期?哪個(gè)方法可以多次被調(diào)用:答:1)與采用Context.startS

44、ervice()方法啟動(dòng)服務(wù)有關(guān)的生命周期方法onCreate() -> onStart() -> onDestroy()onCreate()該方法在服務(wù)被創(chuàng)建時(shí)調(diào)用,該方法只會(huì)被調(diào)用一次,無(wú)論調(diào)用多少次startService()或bindService()方法,服務(wù)也只被創(chuàng)建一次。onStart() 只有采用Context.startService()方法啟動(dòng)服務(wù)時(shí)才會(huì)回調(diào)該方法。該方法在服務(wù)開(kāi)始運(yùn)行時(shí)被調(diào)用。多次調(diào)用startService()方法盡管不會(huì)多次創(chuàng)建服務(wù),但onStart() 方法會(huì)被多次調(diào)用。onDestroy()該方法在服務(wù)被終止時(shí)調(diào)用。2)與采用Context.bindService()方法啟動(dòng)服務(wù)有關(guān)的生命周期方法onCreate() -> onBind() -> onUnbind() -> onDestroy()onBind()只有采用Context.bindService()方法啟動(dòng)服務(wù)時(shí)才會(huì)回調(diào)該方法。該方法在調(diào)用者與服務(wù)綁定時(shí)被調(diào)用,當(dāng)調(diào)用者與服務(wù)已經(jīng)綁定,多次調(diào)用Context.bindService(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論