Android面試題_第1頁
Android面試題_第2頁
Android面試題_第3頁
Android面試題_第4頁
Android面試題_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、常見Android面試題及答案(詳細(xì)整理)2014年04月05日 綜合 共 8913字 字號 小 中 大 評論關(guān)閉 1. 請描述一下Activity 生命周期。答: 如下圖所示。共有七個周期函數(shù),按順序分別是: onCreate(), onStart(), onRestart(), onResume(), onPause(),onStop(), onDestroy()。onCreate(): 創(chuàng)建Activity時調(diào)用,設(shè)置在該方法中,還以Bundle的形式提供對以前存儲的任何狀態(tài)的訪問。onStart(): Activity變?yōu)樵谄聊簧蠈τ脩艨梢姇r調(diào)用。onResume(): Activit

2、y開始與用戶交互時調(diào)用(無論是啟動還是重新啟動一個活動,該方法總是被調(diào)用。onPause(): Activity被暫?;蚴栈豤pu和其他資源時調(diào)用,該方法用戶保護(hù)活動狀態(tài)的,也是保護(hù)現(xiàn)場。onStop(): Activity被停止并轉(zhuǎn)為不可見階段及后續(xù)的生命周期事件時調(diào)用。onRestart(): Activity被重新啟動時調(diào)用。該活動仍然在棧中,而不是啟動新的Activity。1、完整生命周期: 即從一個Activity從出現(xiàn)到消失,對應(yīng)的周期方法是從onCreate()到onDestroy()。2、可見生命周期: 當(dāng)Activity處于可以用戶看見的狀態(tài),但不一定能與用戶交互時,將多次執(zhí)

3、行從onStart()到onStop()。3、前景生命周期: 當(dāng)Activity處于Activity棧最頂端,能夠與其他用戶進(jìn)行交互時,將多次執(zhí)行從onResume()到onPause()。2. 哪幾兩個Activity之間跳轉(zhuǎn)時必然會執(zhí)行的是個方法。答: 兩個Activity之間跳轉(zhuǎn)必然會執(zhí)行的是下面幾個方法。onCreate()/在Activity生命周期開始時調(diào)用。onRestoreInstanceState()/用來恢復(fù)UI狀態(tài)。onRestart()/當(dāng)Activity重新啟動時調(diào)用。onStart()/當(dāng)Activity對用戶即將可見時調(diào)用。onResume()/當(dāng)Activity

4、與用戶交互時,繪制界面。onSaveInstanceState()/即將移出棧頂保留UI狀態(tài)時調(diào)用。onPause()/暫停當(dāng)前活動Activity,提交持久數(shù)據(jù)的改變,停止動畫或其他占用GPU資源的東西,由于下一個Activity在這個方法返回之前不會resume,所以這個方法的代碼執(zhí)行要快。onStop()/Activity不再可見時調(diào)用。onDestroy()/Activity銷毀棧時被調(diào)用的最后一個方法。3. 橫豎屏切換時候Activity的生命周期。答: 1、不設(shè)置Activity的android: configChanges時,切屏?xí)匦抡{(diào)用各個生命周期,切橫屏?xí)r會執(zhí)行一次,切豎屏

5、時會執(zhí)行兩次。2、設(shè)置Activity的android: configChanges=“orientation”時,切屏還是會重新調(diào)用各個生命周期,切橫、豎屏?xí)r只會執(zhí)行一次。3、設(shè)置Activity的android: configChanges=“orientation|keyboardHidden”時,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行onConfiguration方法4. 如何將一個Activity設(shè)置成窗口的樣式。答: 第一種方法,在styles.xml文件中,可以新建如下的類似Dialog的style。<style name=“Theme.FloatActivity” par

6、ent=“android:style/Theme.Dialog”> </style>。第二種方法,在AndroidManifest.xml中在需要顯示為窗口的Activity中添加如下屬性:  android: theme=“style/Theme.FloatActivity”即可。也可以直接添加對應(yīng)需要展示為Dialog style的Activity的android: theme屬性為android: theme=“ android: style/Theme.Dialog”。5. 兩個Activity之間怎么傳遞數(shù)據(jù)?答: 可以在Intent對象中利用Extra來

7、傳遞存儲數(shù)據(jù)。在Intent的對象請求中,使用putExtra(“鍵值對的名字”,”鍵值對的值”);在另外一個Activity中將Intent中的請求數(shù)據(jù)取出來: Intent intent = getIntent();String value = intent.getStringExtra(“testIntent”);6. 怎么讓在啟動一個Activity是就啟動一個service?答: 首先定義好一個service,然后在Activity的onCreate里面進(jìn)行連接并bindservice或者直接startService。7. Activity怎么和service綁定,怎么在activi

8、ty中啟動自己對應(yīng)的service?答: 1、activity能進(jìn)行綁定得益于Serviece的接口。為了支持Service的綁定,實(shí)現(xiàn)onBind方法。2、Service和Activity的連接可以用ServiceConnection來實(shí)現(xiàn)。需要實(shí)現(xiàn)一個新的ServiceConnection,重現(xiàn)onServiceConnected和OnServiceDisconnected方法,一旦連接建立,就能得到Service實(shí)例的引用。3、執(zhí)行綁定,調(diào)用bindService方法,傳入一個選擇了要綁定的Service的Intent(顯示或隱式)和一個你實(shí)現(xiàn)了的ServiceConnection的實(shí)例

9、8.什么是Service以及描述下它的生命周期。Service有哪些啟動方法,有什么區(qū)別,怎樣停用Service?答: Android Service是運(yùn)行在后臺的代碼,不能與用戶交互,可以運(yùn)行在自己的進(jìn)程,也可以運(yùn)行在其他應(yīng)用程序進(jìn)程的上下文里。需要通過某一個Activity或者Context對象來調(diào)用。Service有兩個啟動方法,分別是Context.startService()和Context.bindService()。如果在Service執(zhí)行耗時的操作需要啟動一個新線程來執(zhí)行。Android Service只繼承了onCreate(), onStart(),onDestroy()三

10、個方法,當(dāng)我們第一次啟動Service時,先后調(diào)用onCreate(), onStart()這兩個方法,當(dāng)停止Service時,則執(zhí)行onDestroy()方法時。如果Service已經(jīng)啟動了,當(dāng)我們再次啟動Service時,不會再執(zhí)行onCreate()方法,而是直接執(zhí)行onStart()方法。9. 什么時候使用Service?答: 比如播放多媒體的時候,用戶啟動了其他Activity,這個時候程序要在后臺繼續(xù)播放,比如檢測SD卡上文件的變化,再或者在后臺記錄你的地理信息位置的改變等等。10. 請描述一下Intent 和 Intent Filter。答: Intent在Android中被翻譯

11、為”意圖”,他是三種應(yīng)用程序基本組件-Activity,Service和broadcast receiver之間相互激活的手段。在調(diào)用Intent名稱時使用ComponentName也就是類的全名時為顯示調(diào)用。這種方式一般用于應(yīng)用程序的內(nèi)部調(diào)用,因?yàn)槟悴灰欢〞绖e人寫的類的全名。而Intent Filter是指意圖過濾,不出現(xiàn)在代碼中,而是出現(xiàn)在android Manifest文件中,以<intent-filter>的形式。(有一個例外是broadcast receiver的intentfilter是使用Context.registerReceiver()來動態(tài)設(shè)定的,其中int

12、ent filter也是在代碼中創(chuàng)建的)一個intent有action,data,category等字段。一個隱式intent為了能夠被某個intent filter接收,必須通過3個測試,一個intent為了被某個組件接收,則必須通過它所有的intent filter中的一個。11. Intent傳遞數(shù)據(jù)時,可以傳遞哪些類型數(shù)據(jù)?答: intent間傳送數(shù)據(jù)一般有兩種常用的方法: 1、extra 2、data。extra可以用Intent.putExtra放入數(shù)據(jù)。新啟動的Activity可用Intent.getExtras取出Bundle,然后用Bundles.getLong,getInt

13、,getBoolean,getString等函數(shù)來取放進(jìn)去的值。Data則是傳輸url。url可以是指我們熟悉的http,ftp等網(wǎng)絡(luò)地址,也可以指content來指向ContentProvider提供的資源。Intent.setData可以放入數(shù)據(jù),Intent.getData可以取出數(shù)據(jù)。12. 說說Activity,Intent,Service是什么關(guān)系 ?答: 一個Activity通常是一個單獨(dú)的屏幕,每一個Activity都被實(shí)現(xiàn)為一個單獨(dú)的類,這些類都是從Activity基類中繼承而來的。Activity類會顯示由視圖控件組成的用戶接口,并對視圖控件的事件做出響應(yīng)。Intent的調(diào)

14、用是用來進(jìn)行屏幕之間的切換。Intent描述應(yīng)用想要做什么。Intent數(shù)據(jù)結(jié)構(gòu)中兩個最重要的部分是動作和動作對應(yīng)的數(shù)據(jù),一個動作對應(yīng)一個動作數(shù)據(jù)。Service是運(yùn)行在后臺的代碼,不能與用戶交互,可以運(yùn)行在自己的進(jìn)程里,也可以運(yùn)行在其他應(yīng)用程序進(jìn)程的上下文里。需要一個Activity或者其他Context對象來調(diào)用。Activity跳轉(zhuǎn)Activity,Activity啟動Service,Service打開Activity都需要Intent表明意圖,以及傳遞參數(shù),Intent是這些組件間信號傳遞的承載著。13. 請描述一下BroadcastReceiver。答: Broadcast Rece

15、iver用于接收并處理廣播通知(broadcast announcements)。多數(shù)的廣播是系統(tǒng)發(fā)起的,如地域變換、電量不足、來電短信等。程序也可以播放一個廣播。程序可以有任意數(shù)量的broadcast receivers來響應(yīng)它覺得重要的通知。Broadcast receiver可以通過多種方式通知用戶: 啟動activity、使用NotificationManager、開啟背景燈、振動設(shè)備、播放聲音等,最典型的是在狀態(tài)欄顯示一個圖標(biāo),這樣用戶就可以點(diǎn)它打開看通知內(nèi)容。通常我們的某個應(yīng)用或系統(tǒng)本身在某些事件(電池電量不足、來電短信)來臨時會廣播一個Intent出去,我們利用注冊一個broad

16、castreceiver來監(jiān)聽這些Intent并獲取Intent中的數(shù)據(jù)。14. 在manifest和代碼中如何注冊和使用 broadcast receiver 。答: 在android的manifest中注冊<receiver android: name =“Receiver1”>                <intent-filter>       

17、60;                    <!-和Intent中的action對應(yīng)->                         

18、0;  <actionandroid: name=“com.forrest.action.mybroadcast”/>                </intent-filter></receiver>在代碼中注冊1、 IntentFilter filter = new IntentFilter(“com.forrest.action.mybroadcast”);/和廣播中Intent的action對應(yīng);2、

19、 MyBroadcastReceiver br= new MyBroadcastReceiver();3、 registerReceiver(br, filter);15. 請介紹下ContentProvider是如何實(shí)現(xiàn)數(shù)據(jù)共享的。答: 一個程序可以通過實(shí)現(xiàn)一個Content provider的抽象接口將自己的數(shù)據(jù)完全暴露出去,而且Content provider是以類似數(shù)據(jù)庫中的表的方式將自己的數(shù)據(jù)暴露。Content provider存儲和檢索數(shù)據(jù),通過它可以讓所有的應(yīng)用程序訪問到,這也是應(yīng)用程序之間唯一共享數(shù)據(jù)的方法。要想使應(yīng)用程序的數(shù)據(jù)公開化,可通過2種方法:創(chuàng)建一個數(shù)據(jù)自己的Con

20、tent Provider或者將你的數(shù)據(jù)添加到一個已經(jīng)存在的Content Provider中,前提是有相同數(shù)據(jù)類型并且有寫入Content Provider的權(quán)限,Android提供了Content Resolverr,外界的程序可以通過Content Resolver接口訪問Content Provider提供的數(shù)據(jù)。16. 請介紹下Android的數(shù)據(jù)存儲方式。答: Android提供了5中存儲數(shù)據(jù)的方式,分別是以下幾種1、使用Shared Preferences存儲數(shù)據(jù),用來存儲key-value,pairs格式的數(shù)據(jù),它是一個輕量級的鍵值存儲機(jī)制,只可以存儲基本數(shù)據(jù)類型。2、使用文件

21、存儲數(shù)據(jù),通過FileInputStream和FileOutputStream對文件進(jìn)行操作。在Android中,文件是一個應(yīng)用程序私有的,一個應(yīng)用程序無法讀寫其他應(yīng)用程序的文件。3、使用SQLite數(shù)據(jù)庫存儲數(shù)據(jù),Android提供的一個標(biāo)準(zhǔn)數(shù)據(jù)庫,支持SQL語句。4、使用Content Provider存儲數(shù)據(jù),是所有應(yīng)用程序之間數(shù)據(jù)存儲和檢索的一個橋梁,它的作用就是使得各個應(yīng)用程序之間實(shí)現(xiàn)數(shù)據(jù)共享。它是一個特殊的存儲數(shù)據(jù)的類型,它提供了一套標(biāo)準(zhǔn)的接口用來獲取數(shù)據(jù),操作數(shù)據(jù)。系統(tǒng)也提供了音頻、視頻、圖像和個人信息等幾個常用的Content Provider。如果你想公開自己的私有數(shù)據(jù),可以

22、創(chuàng)建自己的Content Provider類,或者當(dāng)你對這些數(shù)據(jù)擁有控制寫入的權(quán)限時,將這些數(shù)據(jù)添加到Content Provider中實(shí)現(xiàn)共享。外部訪問通過Content Resolver去訪問并操作這些被暴露的數(shù)據(jù)。5、使用網(wǎng)絡(luò)存儲數(shù)據(jù)17. 請介紹下Android中常用的五種布局。答: 最常用的布局方式為Absolute Layout、Relative Layout、Linear Layout、FrameLayout、TableLayout。其中Linear Layout和Relative Layout是最常用的方式,他們可以通過在xml配置文件或者代碼中進(jìn)行布局。1、Frame Lay

23、out是最簡單的布局方式,放置的控件都只能羅列到左上角,控件會有重疊,不能進(jìn)行復(fù)雜的布局。2、Linear Layout可以通過orientation屬性設(shè)置線性排列的方向是垂直還是縱向的,每行或每列只有一個元素,可以進(jìn)行復(fù)雜的布局。3、Absolute Layout可以讓子元素指定準(zhǔn)確的x、y坐標(biāo)值,并顯示在屏幕上。Absolute Layout沒有頁邊框,允許元素之間相互重疊。它是絕對坐標(biāo),所以在實(shí)際中不提倡使用。4、Relative Layout允許子元素制定他們相對于其他元素或父元素的位置(通過ID制定)。因此,你可以以右對齊,或上下,或置于屏幕中央的形式來排列兩個元素。元素按順序排列

24、,因此如果第一個元素在屏幕的中央,那么相對于這個元素的其他元素將以屏幕中央的相對位置來排列。這個是相對于Absolute Layout的,采用相對坐標(biāo),所以在實(shí)際中比較常用。5、Table Layout將以子元素的位置分配到行或列。一個Table Layout由許多的Table Row組成,每個Table Row都會定義一個row。Table Layout容器不會顯示row、column或者cell的邊線框。每個row擁有0個或多個的cell; 和html中的table差不多。在實(shí)際中也經(jīng)常使用。18. 談?wù)刄I中, Padding和Margin有什么區(qū)別?答: Padding是控件的內(nèi)容相對

25、控件的邊緣的邊距,而Margin是控件邊緣相對于其他控件的邊距。如下圖所示:19.  android本身的一些限制,比如apk包大小限制,讀取大文件時的時間限。答:apk包大小限制不好說,有的apk為100M,還是能裝到手機(jī)上。一般的apk大小為510M左右。讀取大文件的時間應(yīng)該是在main線程里面,時間限制為5秒左右。20. ListView如何提高其效率?答:1、使用分頁加載,不要一次性加載所有數(shù)據(jù)。2、復(fù)用convertView。在getItemView中,判斷converView是否為空,如果不為空,可復(fù)用。3、異步加載圖片。Item中如果包含有webimage,那么最好異步

26、加載。4、快速滑動時,不顯示圖片。當(dāng)快速滑動列表(SCROLL_STATE_FLING),item中的圖片或獲取需要消耗資源的view,可以不顯示出來;而處于其他兩種狀態(tài)(SCROLL_STATE_IDLE和SCROLL_STATE_TOUCH_SCROLL),則將那些view顯示出來21. Android程序與Java程序的區(qū)別?區(qū)別Java程序Android程序執(zhí)行入口點(diǎn)MainAndroid Mainfest.xml配置文件中的intent-filterUIFrame·Activity是否基于配置文件否是是否基于組件否是Activity,Service,Broadcast Re

27、ceiver,Content Provider22. 談?wù)剬ndroid NDK的理解。答: android NDK是一套工具,允許Android應(yīng)用開發(fā)者嵌入從C、C+源代碼編譯來的本地機(jī)器代碼到各自的應(yīng)用軟件包中。1、 NDK是一系列工具的集合。NDK提供了一系列的工具,幫助開發(fā)者快速開發(fā)C(或C+)的動態(tài)庫,并能自動將so和java應(yīng)用一起打包成apk。這些工具對開發(fā)者幫助時巨大的。NDK集成了交叉編輯器,并提供了相應(yīng)的mk文件隔離CPU、平臺、API等差異,開發(fā)人員只需要簡單修改mk文件(指出“那些文件需要編譯”、“編譯特性要求”等),就可以創(chuàng)建出so。NDK可以自動將so和Java

28、應(yīng)用一起打包,極大的減輕了開發(fā)人員的打包工作。2、NDK提供了一份穩(wěn)定、功能有限的API頭文件聲明。這些API支持的功能非常有限,包含有:C標(biāo)準(zhǔn)庫(libc)、標(biāo)準(zhǔn)數(shù)學(xué)庫(libm)、壓縮庫(libz)、log庫(liblog)。23. 談?wù)凙ndroid的優(yōu)點(diǎn)和不足之處。答: 優(yōu)點(diǎn)如下所示:1、android是開源、市場占有率大。2、android能夠有豐富的硬件選擇。3、android是一款基于Linux平臺的開源操作系統(tǒng),從而避免了專利壁壘,是一款完全免費(fèi)的只能手機(jī)平臺。4、由于android是google開發(fā)的,因此能夠無縫結(jié)合Google應(yīng)用。缺點(diǎn)如下所示:1、安全與隱私。手機(jī)與互聯(lián)

29、網(wǎng)緊密聯(lián)系,個人隱私很難得到保守。24. Android系統(tǒng)中GC什么情況下會出現(xiàn)內(nèi)存泄露呢?答: 導(dǎo)致內(nèi)存泄露主要的原因是,先前申請了內(nèi)存空間而忘記了釋放。如果程序中存在無用對象的引用,那么這些對象就會駐留內(nèi)存,消耗內(nèi)存,因?yàn)闊o法讓垃圾回收器GC驗(yàn)證這些對象是否不再需要。如果存在對象的引用,這個對象就被定義為“有效的活動”,同時不會被釋放。要確定對象所占內(nèi)存將被回收,我們就要確認(rèn)該對象不會再被使用。典型的做法是把對象數(shù)據(jù)成員設(shè)為null或者從集合中移除該對象。當(dāng)出現(xiàn)以下情況時,會造成內(nèi)存泄露:1、 數(shù)據(jù)庫的cursor沒有關(guān)閉。2、 構(gòu)造adapter時,沒有使用緩存contentview。

30、3、 Bitmap對象不使用時,采用recycle()釋放內(nèi)存。4、 Activity中的對象的生命周期大于activity。調(diào)試方法: DDMS=>HEAPSIZE=>dataobject=>TotalSize25. Android UI中的View如何刷新。答: Android中對View的更新方式有很多種,使用時要區(qū)分不同的應(yīng)用場合。要分清的是:多線程和雙緩沖。1、不使用多線程和雙緩沖這種情況最簡單,一般只希望View在發(fā)生改變時對UI進(jìn)行重繪。你只需要Activity中顯式調(diào)用View對象中的invalidate()方法即可。系統(tǒng)會自動調(diào)用View的onDraw()方

31、法。2、使用多線程和不使用雙緩沖這種情況下需要開啟新的線程,新開的線程就不好訪問View對象了。強(qiáng)行訪問的話會報(bào)錯:android.view.ViewRoot$ CalledFromWrongThreadException: only theoriginal thread that created a view hierarchy can touch its views。這時候你需要創(chuàng)建一個繼承了android.os.handler的子類,并重寫handleMessage方法。Android.os.Handle是能發(fā)送和處理消息的,你需要在Activity中發(fā)出更新UI的消息,然后再你的Han

32、dler(可以使用匿名內(nèi)部類)中處理消息(因?yàn)槟涿麅?nèi)部類可以訪問父類變量,你可以直接調(diào)用View對象中的invalidate()方法。也就是說:在新線程中創(chuàng)建并發(fā)送一個Message,然后在主線程中捕獲、處理該消息。3、使用多線程和雙緩沖Android的SurfaceView是View的子類,她同時也實(shí)現(xiàn)了雙緩沖。你可以定義一個她的子類并實(shí)現(xiàn)Surfaceholder.Callback接口。由于SurfaceHolder.Callback接口,新線程就不要android.os.Handler幫忙了。SurfaceHolder中l(wèi)ockCanvas()方法可以鎖定畫布,繪制完新的圖像后調(diào)用unl

33、ockCanvasand Post解鎖。整理一些常見的java及android面試題(2) 2013-07-23 16:07 2745人閱讀 評論(0) 收藏 舉報(bào) 本文章已收錄于: 分類: android相關(guān)(78) 作者同類文章Xjava(7) 作者同類文章X版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。1. 什么是Activity?四大組件之一,一般的,一個用戶交互界面對應(yīng)一個activity, activity 是Context的子類,同時實(shí)現(xiàn)了window.callback和keyevent.callback, 可以處理與窗體用戶交互的事件. 我開發(fā)常用的的有ListActiv

34、ity  , PreferenceActivity 等如果界面有共同的特點(diǎn)或者功能的時候,還會自己定義一個BaseActivity.2. 請描述一下Activity生命周期。生命周期描述的是一個類 從創(chuàng)建(new出來)到死亡(垃圾回收)的過程中會執(zhí)行的方法.在這個過程中 會針對不同的生命階段會調(diào)用不同的方法Activity從創(chuàng)建到銷毀有多種狀態(tài),從一種狀態(tài)到另一種狀態(tài)時會激發(fā)相應(yīng)的回調(diào)方法,這些回調(diào)方法包括:oncreateondestroy onstop onstart onresume onpause 其實(shí)這些方法都是兩兩對應(yīng)的,onCreate創(chuàng)建與onDestroy銷毀;on

35、Start可見與onStop不可見;onResume可編輯(即焦點(diǎn))與onPause;這6個方法是相對應(yīng)的,那么就只剩下一個onRestart方法了,這個方法在什么時候調(diào)用呢?答案就是:在Activity被onStop后,但是沒有被onDestroy,在再次啟動此Activity時就調(diào)用onRestart(而不再調(diào)用onCreate)方法;如果被onDestroy了,則是調(diào)用onCreate方法。最后講自己項(xiàng)目中的經(jīng)驗(yàn),比如說客戶端每次進(jìn)入某個界面的時候要刷新列表,這個刷新列表的操作 就放在onStart()的方法里面.這樣保證每次用戶看到的數(shù)據(jù)都是最新的.多媒體播放, 播放來電話. onSt

36、op() 視頻, 視頻聲音設(shè)置為0 , 記錄視頻播放的位子onStart() 根據(jù)保存的狀態(tài)恢復(fù)現(xiàn)場3.兩個Activity之間跳轉(zhuǎn)時必然會執(zhí)行的是哪幾個方法。一般情況比如說有兩個activity,分別叫A,B ,當(dāng)在A里面激活B組件的時候,A會調(diào)用 onPause()方法,然后B調(diào)用onCreate() ,onStart(),OnResume() , 這個時候B覆蓋了窗體, A會調(diào)用onStop()方法.  如果B呢 是個透明的,或者是對話框的樣式,就不會調(diào)用onStop()方法4.橫豎屏切換時候Activity的生命周期。這個生命周期跟清單文件里的配置有關(guān)系1、不設(shè)置Activi

37、ty的android:configChanges時,切屏?xí)匦抡{(diào)用各個生命周期默認(rèn)首先銷毀當(dāng)前activity,然后重新加載2、設(shè)置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行onConfigurationChanged方法5.你后臺的Activity被系統(tǒng)回收怎么辦?如果后臺的Activity由于某原因被系統(tǒng)回收可了,如何在被系統(tǒng)回收之前保存當(dāng)前狀態(tài)?除了在棧頂?shù)腶ctivity,其他的activity都有可能在內(nèi)存不足的時候被系統(tǒng)回收,一個activity

38、越處于棧底,被回收的可能性越大.protected void onSaveInstanceState(Bundle outState)       super.onSaveInstanceState(outState);      outState.putLong("id", 1234567890);public void onCreate(BundlesavedInstanceState) /判斷savedInstanceState是不是空./如果不為空就取出來    &#

39、160;  super.onCreate(savedInstanceState);1、拋異常強(qiáng)制退出:該方法通過拋異常,使程序Force Close。驗(yàn)證可以,但是,需要解決的問題是,如何使程序結(jié)束掉,而不彈出Force Close的窗口。2、記錄打開的Activity:每打開一個Activity,就記錄下來。在需要退出時,關(guān)閉每一個Activity即可。3、發(fā)送特定廣播:在需要結(jié)束應(yīng)用時,發(fā)送一個特定的廣播,每個Activity收到廣播后,關(guān)閉即可。4、遞歸退出在打開新的Activity時使用startActivityForResult,然后自己加標(biāo)志,在onActivityRes

40、ult中處理,遞歸關(guān)閉。上面是網(wǎng)上的一些做法.其實(shí) 可以通過 intent的flag來實(shí)現(xiàn).intent.setFlag(FLAG_ACTIVITY_CLEAR_TOP)激活一個新的activity,然后在新的activity的oncreate方法里面 finish掉。6. Activity怎么和service綁定,怎么在activity中啟動自己對應(yīng)的service?bindService().  讓activity能夠訪問到 service里面的方法  構(gòu)建一個intent對象,Intent service = new Intent(this,MyService.cla

41、ss);  通過bindService的方法去啟動一個服務(wù), ServiceConnection 對象(重寫onServiceConnected和OnServiceDisconnected方法) 和BIND_AUTO_CREATEServices7 .什么是Service以及描述下它的生命周期。Service有哪些啟動方法,有什么區(qū)別,怎樣停用Service?在Service的生命周期中,被回調(diào)的方法比Activity少一些,只有onCreate, onStart, onDestroy,onBind和onUnbind。通常有兩種方式啟動一個Service,他們對Servic

42、e生命周期的影響是不一樣的。1 通過startService ,Service會經(jīng)歷 onCreate 到onStart,然后處于運(yùn)行狀態(tài),stopService的時候調(diào)用onDestroy方法。如果是調(diào)用者自己直接退出而沒有調(diào)用stopService的話,Service會一直在后臺運(yùn)行。2 通過bindService,Service會運(yùn)行onCreate,然后是調(diào)用onBind, 這個時候調(diào)用者和Service綁定在一起。調(diào)用者退出了,Srevice就會調(diào)用onUnbind->onDestroyed方法。所謂綁定在一起就共存亡了。調(diào)用者也可以通過調(diào)用unbindService方法來停止

43、服務(wù),這時候Srevice就會調(diào)用onUnbind->onDestroyed方法。需要注意的是如果這幾個方法交織在一起的話,會出現(xiàn)什么情況呢?一個原則是Service的onCreate的方法只會被調(diào)用一次,就是你無論多少次的startService又bindService,Service只被創(chuàng)建一次。如果先是bind了,那么start的時候就直接運(yùn)行Service的onStart方法,如果先是start,那么bind的時候就直接運(yùn)行onBind方法.如果service運(yùn)行期間調(diào)用了bindService,這時候再調(diào)用stopService的話,service是不會調(diào)用onDestroy方

44、法的,service就stop不掉了,只能先UnbindService,再StopService。如果一個service通過startService 被start之后,多次調(diào)用startService 的話,service會多次調(diào)用onStart方法。多次調(diào)用stopService的話,service只會調(diào)用一次onDestroyed方法。如果一個service通過bindService被start之后,多次調(diào)用bindService的話,service只會調(diào)用一次onBind方法。多次調(diào)用unbindService的話會拋出異常。8.什么時候使用Service?擁有service的進(jìn)程具有較

45、高的優(yōu)先級,官方文檔告訴我們,Android系統(tǒng)會盡量保持擁有service的進(jìn)程運(yùn)行,只要在該service已經(jīng)被啟動(start)或者客戶端連接(bindService)到它。當(dāng)內(nèi)存不足時,需要保持,擁有service的進(jìn)程具有較高的優(yōu)先級。1如果service正在調(diào)用onCreate,  onStartCommand或者onDestory方法,那么用于當(dāng)前service的進(jìn)程相當(dāng)于前臺進(jìn)程以避免被killed。2如果當(dāng)前service已經(jīng)被啟動(start),擁有它的進(jìn)程則比那些用戶可見的進(jìn)程優(yōu)先級低一些,但是比那些不可見的進(jìn)程更重要,這就意味著service一般不會被kill

46、ed.3如果客戶端已經(jīng)連接到service(bindService),那么擁有Service的進(jìn)程則擁有最高的優(yōu)先級,可以認(rèn)為service是可見的。4如果service可以使用startForeground(int, Notification)方法來將service設(shè)置為前臺狀態(tài),那么系統(tǒng)就認(rèn)為是對用戶可見的,并不會在內(nèi)存不足時killed。如果有其他的應(yīng)用組件作為Service,Activity等運(yùn)行在相同的進(jìn)程中,那么將會增加該進(jìn)程的重要性。 1.Service的特點(diǎn)可以讓他在后臺一直運(yùn)行,可以在service里面創(chuàng)建線程去完成耗時的操作. 2.Broadcast receiver捕獲到一個事件之后,可以起一個service來完成一個耗時的操作. 3.遠(yuǎn)程的service如果被啟動起來,可以被多次bind, 但不會重新create. 索愛手機(jī)X10i的人臉識別的service可以被圖庫使用,可以被攝像機(jī),照相機(jī)等程序使用.9. 請介紹下Android的數(shù)據(jù)存儲方式 android的數(shù)據(jù)存儲的方式sharedpreference,文件,SQlite,contentprovider,網(wǎng)絡(luò)。10.為什么要用ContentProvider?它和sql的實(shí)現(xiàn)上有什么差別?屏蔽數(shù)據(jù)存儲的細(xì)節(jié),對用戶透明,用戶

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論