




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、常見Android面試題及答案(詳細整理)2014年04月05日 綜合 共 8913字 字號 小 中 大 評論關(guān)閉 1. 請描述一下Activity 生命周期。答: 如下圖所示。共有七個周期函數(shù),按順序分別是: onCreate(), onStart(), onRestart(), onResume(), onPause(),onStop(), onDestroy()。onCreate(): 創(chuàng)建Activity時調(diào)用,設置在該方法中,還以Bundle的形式提供對以前存儲的任何狀態(tài)的訪問。onStart(): Activity變?yōu)樵谄聊簧蠈τ脩艨梢姇r調(diào)用。onResume(): Activit
2、y開始與用戶交互時調(diào)用(無論是啟動還是重新啟動一個活動,該方法總是被調(diào)用。onPause(): Activity被暫?;蚴栈豤pu和其他資源時調(diào)用,該方法用戶保護活動狀態(tài)的,也是保護現(xiàn)場。onStop(): Activity被停止并轉(zhuǎn)為不可見階段及后續(xù)的生命周期事件時調(diào)用。onRestart(): Activity被重新啟動時調(diào)用。該活動仍然在棧中,而不是啟動新的Activity。1、完整生命周期: 即從一個Activity從出現(xiàn)到消失,對應的周期方法是從onCreate()到onDestroy()。2、可見生命周期: 當Activity處于可以用戶看見的狀態(tài),但不一定能與用戶交互時,將多次執(zhí)
3、行從onStart()到onStop()。3、前景生命周期: 當Activity處于Activity棧最頂端,能夠與其他用戶進行交互時,將多次執(zhí)行從onResume()到onPause()。2. 哪幾兩個Activity之間跳轉(zhuǎn)時必然會執(zhí)行的是個方法。答: 兩個Activity之間跳轉(zhuǎn)必然會執(zhí)行的是下面幾個方法。onCreate()/在Activity生命周期開始時調(diào)用。onRestoreInstanceState()/用來恢復UI狀態(tài)。onRestart()/當Activity重新啟動時調(diào)用。onStart()/當Activity對用戶即將可見時調(diào)用。onResume()/當Activity
4、與用戶交互時,繪制界面。onSaveInstanceState()/即將移出棧頂保留UI狀態(tài)時調(diào)用。onPause()/暫停當前活動Activity,提交持久數(shù)據(jù)的改變,停止動畫或其他占用GPU資源的東西,由于下一個Activity在這個方法返回之前不會resume,所以這個方法的代碼執(zhí)行要快。onStop()/Activity不再可見時調(diào)用。onDestroy()/Activity銷毀棧時被調(diào)用的最后一個方法。3. 橫豎屏切換時候Activity的生命周期。答: 1、不設置Activity的android: configChanges時,切屏會重新調(diào)用各個生命周期,切橫屏時會執(zhí)行一次,切豎屏
5、時會執(zhí)行兩次。2、設置Activity的android: configChanges=“orientation”時,切屏還是會重新調(diào)用各個生命周期,切橫、豎屏時只會執(zhí)行一次。3、設置Activity的android: configChanges=“orientation|keyboardHidden”時,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行onConfiguration方法4. 如何將一個Activity設置成窗口的樣式。答: 第一種方法,在styles.xml文件中,可以新建如下的類似Dialog的style。<style name=“Theme.FloatActivity” par
6、ent=“android:style/Theme.Dialog”> </style>。第二種方法,在AndroidManifest.xml中在需要顯示為窗口的Activity中添加如下屬性: android: theme=“style/Theme.FloatActivity”即可。也可以直接添加對應需要展示為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里面進行連接并bindservice或者直接startService。7. Activity怎么和service綁定,怎么在activi
8、ty中啟動自己對應的service?答: 1、activity能進行綁定得益于Serviece的接口。為了支持Service的綁定,實現(xiàn)onBind方法。2、Service和Activity的連接可以用ServiceConnection來實現(xiàn)。需要實現(xiàn)一個新的ServiceConnection,重現(xiàn)onServiceConnected和OnServiceDisconnected方法,一旦連接建立,就能得到Service實例的引用。3、執(zhí)行綁定,調(diào)用bindService方法,傳入一個選擇了要綁定的Service的Intent(顯示或隱式)和一個你實現(xiàn)了的ServiceConnection的實例
9、8.什么是Service以及描述下它的生命周期。Service有哪些啟動方法,有什么區(qū)別,怎樣停用Service?答: Android Service是運行在后臺的代碼,不能與用戶交互,可以運行在自己的進程,也可以運行在其他應用程序進程的上下文里。需要通過某一個Activity或者Context對象來調(diào)用。Service有兩個啟動方法,分別是Context.startService()和Context.bindService()。如果在Service執(zhí)行耗時的操作需要啟動一個新線程來執(zhí)行。Android Service只繼承了onCreate(), onStart(),onDestroy()三
10、個方法,當我們第一次啟動Service時,先后調(diào)用onCreate(), onStart()這兩個方法,當停止Service時,則執(zhí)行onDestroy()方法時。如果Service已經(jīng)啟動了,當我們再次啟動Service時,不會再執(zhí)行onCreate()方法,而是直接執(zhí)行onStart()方法。9. 什么時候使用Service?答: 比如播放多媒體的時候,用戶啟動了其他Activity,這個時候程序要在后臺繼續(xù)播放,比如檢測SD卡上文件的變化,再或者在后臺記錄你的地理信息位置的改變等等。10. 請描述一下Intent 和 Intent Filter。答: Intent在Android中被翻譯
11、為”意圖”,他是三種應用程序基本組件-Activity,Service和broadcast receiver之間相互激活的手段。在調(diào)用Intent名稱時使用ComponentName也就是類的全名時為顯示調(diào)用。這種方式一般用于應用程序的內(nèi)部調(diào)用,因為你不一定會知道別人寫的類的全名。而Intent Filter是指意圖過濾,不出現(xiàn)在代碼中,而是出現(xiàn)在android Manifest文件中,以<intent-filter>的形式。(有一個例外是broadcast receiver的intentfilter是使用Context.registerReceiver()來動態(tài)設定的,其中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ù)來取放進去的值。Data則是傳輸url。url可以是指我們熟悉的http,ftp等網(wǎng)絡地址,也可以指content來指向ContentProvider提供的資源。Intent.setData可以放入數(shù)據(jù),Intent.getData可以取出數(shù)據(jù)。12. 說說Activity,Intent,Service是什么關(guān)系 ?答: 一個Activity通常是一個單獨的屏幕,每一個Activity都被實現(xiàn)為一個單獨的類,這些類都是從Activity基類中繼承而來的。Activity類會顯示由視圖控件組成的用戶接口,并對視圖控件的事件做出響應。Intent的調(diào)
14、用是用來進行屏幕之間的切換。Intent描述應用想要做什么。Intent數(shù)據(jù)結(jié)構(gòu)中兩個最重要的部分是動作和動作對應的數(shù)據(jù),一個動作對應一個動作數(shù)據(jù)。Service是運行在后臺的代碼,不能與用戶交互,可以運行在自己的進程里,也可以運行在其他應用程序進程的上下文里。需要一個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來響應它覺得重要的通知。Broadcast receiver可以通過多種方式通知用戶: 啟動activity、使用NotificationManager、開啟背景燈、振動設備、播放聲音等,最典型的是在狀態(tài)欄顯示一個圖標,這樣用戶就可以點它打開看通知內(nèi)容。通常我們的某個應用或系統(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對應->
18、0; <actionandroid: name=“com.forrest.action.mybroadcast”/> </intent-filter></receiver>在代碼中注冊1、 IntentFilter filter = new IntentFilter(“com.forrest.action.mybroadcast”);/和廣播中Intent的action對應;2、
19、 MyBroadcastReceiver br= new MyBroadcastReceiver();3、 registerReceiver(br, filter);15. 請介紹下ContentProvider是如何實現(xiàn)數(shù)據(jù)共享的。答: 一個程序可以通過實現(xiàn)一個Content provider的抽象接口將自己的數(shù)據(jù)完全暴露出去,而且Content provider是以類似數(shù)據(jù)庫中的表的方式將自己的數(shù)據(jù)暴露。Content provider存儲和檢索數(shù)據(jù),通過它可以讓所有的應用程序訪問到,這也是應用程序之間唯一共享數(shù)據(jù)的方法。要想使應用程序的數(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ù),它是一個輕量級的鍵值存儲機制,只可以存儲基本數(shù)據(jù)類型。2、使用文件
21、存儲數(shù)據(jù),通過FileInputStream和FileOutputStream對文件進行操作。在Android中,文件是一個應用程序私有的,一個應用程序無法讀寫其他應用程序的文件。3、使用SQLite數(shù)據(jù)庫存儲數(shù)據(jù),Android提供的一個標準數(shù)據(jù)庫,支持SQL語句。4、使用Content Provider存儲數(shù)據(jù),是所有應用程序之間數(shù)據(jù)存儲和檢索的一個橋梁,它的作用就是使得各個應用程序之間實現(xiàn)數(shù)據(jù)共享。它是一個特殊的存儲數(shù)據(jù)的類型,它提供了一套標準的接口用來獲取數(shù)據(jù),操作數(shù)據(jù)。系統(tǒng)也提供了音頻、視頻、圖像和個人信息等幾個常用的Content Provider。如果你想公開自己的私有數(shù)據(jù),可以
22、創(chuàng)建自己的Content Provider類,或者當你對這些數(shù)據(jù)擁有控制寫入的權(quán)限時,將這些數(shù)據(jù)添加到Content Provider中實現(xiàn)共享。外部訪問通過Content Resolver去訪問并操作這些被暴露的數(shù)據(jù)。5、使用網(wǎng)絡存儲數(shù)據(jù)17. 請介紹下Android中常用的五種布局。答: 最常用的布局方式為Absolute Layout、Relative Layout、Linear Layout、FrameLayout、TableLayout。其中Linear Layout和Relative Layout是最常用的方式,他們可以通過在xml配置文件或者代碼中進行布局。1、Frame Lay
23、out是最簡單的布局方式,放置的控件都只能羅列到左上角,控件會有重疊,不能進行復雜的布局。2、Linear Layout可以通過orientation屬性設置線性排列的方向是垂直還是縱向的,每行或每列只有一個元素,可以進行復雜的布局。3、Absolute Layout可以讓子元素指定準確的x、y坐標值,并顯示在屏幕上。Absolute Layout沒有頁邊框,允許元素之間相互重疊。它是絕對坐標,所以在實際中不提倡使用。4、Relative Layout允許子元素制定他們相對于其他元素或父元素的位置(通過ID制定)。因此,你可以以右對齊,或上下,或置于屏幕中央的形式來排列兩個元素。元素按順序排列
24、,因此如果第一個元素在屏幕的中央,那么相對于這個元素的其他元素將以屏幕中央的相對位置來排列。這個是相對于Absolute Layout的,采用相對坐標,所以在實際中比較常用。5、Table Layout將以子元素的位置分配到行或列。一個Table Layout由許多的Table Row組成,每個Table Row都會定義一個row。Table Layout容器不會顯示row、column或者cell的邊線框。每個row擁有0個或多個的cell; 和html中的table差不多。在實際中也經(jīng)常使用。18. 談談UI中, Padding和Margin有什么區(qū)別?答: Padding是控件的內(nèi)容相對
25、控件的邊緣的邊距,而Margin是控件邊緣相對于其他控件的邊距。如下圖所示:19. android本身的一些限制,比如apk包大小限制,讀取大文件時的時間限。答:apk包大小限制不好說,有的apk為100M,還是能裝到手機上。一般的apk大小為510M左右。讀取大文件的時間應該是在main線程里面,時間限制為5秒左右。20. ListView如何提高其效率?答:1、使用分頁加載,不要一次性加載所有數(shù)據(jù)。2、復用convertView。在getItemView中,判斷converView是否為空,如果不為空,可復用。3、異步加載圖片。Item中如果包含有webimage,那么最好異步
26、加載。4、快速滑動時,不顯示圖片。當快速滑動列表(SCROLL_STATE_FLING),item中的圖片或獲取需要消耗資源的view,可以不顯示出來;而處于其他兩種狀態(tài)(SCROLL_STATE_IDLE和SCROLL_STATE_TOUCH_SCROLL),則將那些view顯示出來21. Android程序與Java程序的區(qū)別?區(qū)別Java程序Android程序執(zhí)行入口點MainAndroid Mainfest.xml配置文件中的intent-filterUIFrame·Activity是否基于配置文件否是是否基于組件否是Activity,Service,Broadcast Re
27、ceiver,Content Provider22. 談談對Android NDK的理解。答: android NDK是一套工具,允許Android應用開發(fā)者嵌入從C、C+源代碼編譯來的本地機器代碼到各自的應用軟件包中。1、 NDK是一系列工具的集合。NDK提供了一系列的工具,幫助開發(fā)者快速開發(fā)C(或C+)的動態(tài)庫,并能自動將so和java應用一起打包成apk。這些工具對開發(fā)者幫助時巨大的。NDK集成了交叉編輯器,并提供了相應的mk文件隔離CPU、平臺、API等差異,開發(fā)人員只需要簡單修改mk文件(指出“那些文件需要編譯”、“編譯特性要求”等),就可以創(chuàng)建出so。NDK可以自動將so和Java
28、應用一起打包,極大的減輕了開發(fā)人員的打包工作。2、NDK提供了一份穩(wěn)定、功能有限的API頭文件聲明。這些API支持的功能非常有限,包含有:C標準庫(libc)、標準數(shù)學庫(libm)、壓縮庫(libz)、log庫(liblog)。23. 談談Android的優(yōu)點和不足之處。答: 優(yōu)點如下所示:1、android是開源、市場占有率大。2、android能夠有豐富的硬件選擇。3、android是一款基于Linux平臺的開源操作系統(tǒng),從而避免了專利壁壘,是一款完全免費的只能手機平臺。4、由于android是google開發(fā)的,因此能夠無縫結(jié)合Google應用。缺點如下所示:1、安全與隱私。手機與互聯(lián)
29、網(wǎng)緊密聯(lián)系,個人隱私很難得到保守。24. Android系統(tǒng)中GC什么情況下會出現(xiàn)內(nèi)存泄露呢?答: 導致內(nèi)存泄露主要的原因是,先前申請了內(nèi)存空間而忘記了釋放。如果程序中存在無用對象的引用,那么這些對象就會駐留內(nèi)存,消耗內(nèi)存,因為無法讓垃圾回收器GC驗證這些對象是否不再需要。如果存在對象的引用,這個對象就被定義為“有效的活動”,同時不會被釋放。要確定對象所占內(nèi)存將被回收,我們就要確認該對象不會再被使用。典型的做法是把對象數(shù)據(jù)成員設為null或者從集合中移除該對象。當出現(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ū)分不同的應用場合。要分清的是:多線程和雙緩沖。1、不使用多線程和雙緩沖這種情況最簡單,一般只希望View在發(fā)生改變時對UI進行重繪。你只需要Activity中顯式調(diào)用View對象中的invalidate()方法即可。系統(tǒng)會自動調(diào)用View的onDraw()方
31、法。2、使用多線程和不使用雙緩沖這種情況下需要開啟新的線程,新開的線程就不好訪問View對象了。強行訪問的話會報錯: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)部類)中處理消息(因為匿名內(nèi)部類可以訪問父類變量,你可以直接調(diào)用View對象中的invalidate()方法。也就是說:在新線程中創(chuàng)建并發(fā)送一個Message,然后在主線程中捕獲、處理該消息。3、使用多線程和雙緩沖Android的SurfaceView是View的子類,她同時也實現(xiàn)了雙緩沖。你可以定義一個她的子類并實現(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) 收藏 舉報 本文章已收錄于: 分類: android相關(guān)(78) 作者同類文章Xjava(7) 作者同類文章X版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。1. 什么是Activity?四大組件之一,一般的,一個用戶交互界面對應一個activity, activity 是Context的子類,同時實現(xiàn)了window.callback和keyevent.callback, 可以處理與窗體用戶交互的事件. 我開發(fā)常用的的有ListActiv
34、ity , PreferenceActivity 等如果界面有共同的特點或者功能的時候,還會自己定義一個BaseActivity.2. 請描述一下Activity生命周期。生命周期描述的是一個類 從創(chuàng)建(new出來)到死亡(垃圾回收)的過程中會執(zhí)行的方法.在這個過程中 會針對不同的生命階段會調(diào)用不同的方法Activity從創(chuàng)建到銷毀有多種狀態(tài),從一種狀態(tài)到另一種狀態(tài)時會激發(fā)相應的回調(diào)方法,這些回調(diào)方法包括:oncreateondestroy onstop onstart onresume onpause 其實這些方法都是兩兩對應的,onCreate創(chuàng)建與onDestroy銷毀;on
35、Start可見與onStop不可見;onResume可編輯(即焦點)與onPause;這6個方法是相對應的,那么就只剩下一個onRestart方法了,這個方法在什么時候調(diào)用呢?答案就是:在Activity被onStop后,但是沒有被onDestroy,在再次啟動此Activity時就調(diào)用onRestart(而不再調(diào)用onCreate)方法;如果被onDestroy了,則是調(diào)用onCreate方法。最后講自己項目中的經(jīng)驗,比如說客戶端每次進入某個界面的時候要刷新列表,這個刷新列表的操作 就放在onStart()的方法里面.這樣保證每次用戶看到的數(shù)據(jù)都是最新的.多媒體播放, 播放來電話. onSt
36、op() 視頻, 視頻聲音設置為0 , 記錄視頻播放的位子onStart() 根據(jù)保存的狀態(tài)恢復現(xiàn)場3.兩個Activity之間跳轉(zhuǎn)時必然會執(zhí)行的是哪幾個方法。一般情況比如說有兩個activity,分別叫A,B ,當在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、不設置Activi
37、ty的android:configChanges時,切屏會重新調(diào)用各個生命周期默認首先銷毀當前activity,然后重新加載2、設置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行onConfigurationChanged方法5.你后臺的Activity被系統(tǒng)回收怎么辦?如果后臺的Activity由于某原因被系統(tǒng)回收可了,如何在被系統(tǒ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、拋異常強制退出:該方法通過拋異常,使程序Force Close。驗證可以,但是,需要解決的問題是,如何使程序結(jié)束掉,而不彈出Force Close的窗口。2、記錄打開的Activity:每打開一個Activity,就記錄下來。在需要退出時,關(guān)閉每一個Activity即可。3、發(fā)送特定廣播:在需要結(jié)束應用時,發(fā)送一個特定的廣播,每個Activity收到廣播后,關(guān)閉即可。4、遞歸退出在打開新的Activity時使用startActivityForResult,然后自己加標志,在onActivityRes
40、ult中處理,遞歸關(guān)閉。上面是網(wǎng)上的一些做法.其實 可以通過 intent的flag來實現(xiàn).intent.setFlag(FLAG_ACTIVITY_CLEAR_TOP)激活一個新的activity,然后在新的activity的oncreate方法里面 finish掉。6. Activity怎么和service綁定,怎么在activity中啟動自己對應的service?bindService(). 讓activity能夠訪問到 service里面的方法 構(gòu)建一個intent對象,Intent service = new Intent(this,MyService.cla
41、ss); 通過bindService的方法去啟動一個服務, 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,然后處于運行狀態(tài),stopService的時候調(diào)用onDestroy方法。如果是調(diào)用者自己直接退出而沒有調(diào)用stopService的話,Service會一直在后臺運行。2 通過bindService,Service會運行onCreate,然后是調(diào)用onBind, 這個時候調(diào)用者和Service綁定在一起。調(diào)用者退出了,Srevice就會調(diào)用onUnbind->onDestroyed方法。所謂綁定在一起就共存亡了。調(diào)用者也可以通過調(diào)用unbindService方法來停止
43、服務,這時候Srevice就會調(diào)用onUnbind->onDestroyed方法。需要注意的是如果這幾個方法交織在一起的話,會出現(xiàn)什么情況呢?一個原則是Service的onCreate的方法只會被調(diào)用一次,就是你無論多少次的startService又bindService,Service只被創(chuàng)建一次。如果先是bind了,那么start的時候就直接運行Service的onStart方法,如果先是start,那么bind的時候就直接運行onBind方法.如果service運行期間調(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的進程具有較
45、高的優(yōu)先級,官方文檔告訴我們,Android系統(tǒng)會盡量保持擁有service的進程運行,只要在該service已經(jīng)被啟動(start)或者客戶端連接(bindService)到它。當內(nèi)存不足時,需要保持,擁有service的進程具有較高的優(yōu)先級。1如果service正在調(diào)用onCreate, onStartCommand或者onDestory方法,那么用于當前service的進程相當于前臺進程以避免被killed。2如果當前service已經(jīng)被啟動(start),擁有它的進程則比那些用戶可見的進程優(yōu)先級低一些,但是比那些不可見的進程更重要,這就意味著service一般不會被kill
46、ed.3如果客戶端已經(jīng)連接到service(bindService),那么擁有Service的進程則擁有最高的優(yōu)先級,可以認為service是可見的。4如果service可以使用startForeground(int, Notification)方法來將service設置為前臺狀態(tài),那么系統(tǒng)就認為是對用戶可見的,并不會在內(nèi)存不足時killed。如果有其他的應用組件作為Service,Activity等運行在相同的進程中,那么將會增加該進程的重要性。 1.Service的特點可以讓他在后臺一直運行,可以在service里面創(chuàng)建線程去完成耗時的操作. 2.Broadcast receiver捕獲到一個事件之后,可以起一個service來完成一個耗時的操作. 3.遠程的service如果被啟動起來,可以被多次bind, 但不會重新create. 索愛手機X10i的人臉識別的service可以被圖庫使用,可以被攝像機,照相機等程序使用.9. 請介紹下Android的數(shù)據(jù)存儲方式 android的數(shù)據(jù)存儲的方式sharedpreference,文件,SQlite,contentprovider,網(wǎng)絡。10.為什么要用ContentProvider?它和sql的實現(xiàn)上有什么差別?屏蔽數(shù)據(jù)存儲的細節(jié),對用戶透明,用戶
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國90°刀口角尺數(shù)據(jù)監(jiān)測報告
- 2025年中國2-乙基己酸數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國高精度復膜(過膠)機市場分析及競爭策略研究報告
- 2025至2030年中國防爆塑身球市場分析及競爭策略研究報告
- 2025至2030年中國鋼圈擋圈市場分析及競爭策略研究報告
- 2025至2030年中國賽鴿市場分析及競爭策略研究報告
- 2025至2030年中國腰掛式無線發(fā)射機市場分析及競爭策略研究報告
- 2025至2030年中國糖尿清市場分析及競爭策略研究報告
- 2025至2030年中國益母草流浸膏市場分析及競爭策略研究報告
- 2025至2030年中國環(huán)保型成膜氟蛋白泡沫滅火劑市場分析及競爭策略研究報告
- 人工智能基礎智慧樹知到答案章節(jié)測試2023年武漢學院
- 《廣播電視概論》考試復習題庫(200題)
- 配電室巡檢記錄表
- 卓越績效評價準則概述(專業(yè)性權(quán)威性實用性)
- GB/T 30142-2013平面型電磁屏蔽材料屏蔽效能測量方法
- GB/T 29894-2013木材鑒別方法通則
- 國資進場交易工作流程講座
- 當代法律英語翻譯全
- 制冷操作證培訓教材制冷與空調(diào)設備運行操作作業(yè)培訓教程課件
- 湖南省長沙市望城區(qū)2020-2021學年八年級下學期期末考試歷史試卷
- 煙葉烘烤調(diào)制理論考試試題
評論
0/150
提交評論