1. 程式人生 > >常見Android面試題及答案(詳細整理)

常見Android面試題及答案(詳細整理)

以下是一些常用的Android面試題及答案,有需要沒需要都可以備著,希望能幫到大家。

1. 請描述一下Activity 生命週期。

答: 如下圖所示。共有七個周期函式,按順序分別是: onCreate(), onStart(), onRestart(), onResume(), onPause(),onStop(), onDestroy()。

onCreate(): 建立Activity時呼叫,設定在該方法中,還以Bundle的形式提供對以前儲存的任何狀態的訪問。

onStart(): Activity變為在螢幕上對使用者可見時呼叫。

onResume(): Activity開始與使用者互動時呼叫(無論是啟動還是重新啟動一個活動,該方法總是被呼叫。

onPause(): Activity被暫停或收回cpu和其他資源時呼叫,該方法使用者保護活動狀態的,也是保護現場。

onStop(): Activity被停止並轉為不可見階段及後續的生命週期事件時呼叫。

onRestart(): Activity被重新啟動時呼叫。該活動仍然在棧中,而不是啟動新的Activity。

1、完整生命週期: 即從一個Activity從出現到消失,對應的週期方法是從onCreate()到onDestroy()。

2、可見生命週期: 當Activity處於可以使用者看見的狀態,但不一定能與使用者互動時,將多次執行從onStart()到onStop()。

3、前景生命週期: 當Activity處於Activity棧最頂端,能夠與其他使用者進行互動時,將多次執行從onResume()到onPause()。

2. 兩個Activity之間跳轉時必然會執行的是哪幾個方法。

答: 兩個Activity之間跳轉必然會執行的是下面幾個方法。

onCreate()//在Activity生命週期開始時呼叫。

onRestoreInstanceState()//用來恢復UI狀態。

onRestart()//當Activity重新啟動時呼叫。

onStart()//當Activity對使用者即將可見時呼叫。

onResume()//當Activity與使用者互動時,繪製介面。

onSaveInstanceState()//即將移出棧頂保留UI狀態時呼叫。

onPause()//暫停當前活動Activity,提交持久資料的改變,停止動畫或其他佔用GPU資源的東西,由於下一個Activity在這個方法返回之前不會resume,所以這個方法的程式碼執行要快。

onStop()//Activity不再可見時呼叫。

onDestroy()//Activity銷燬棧時被呼叫的最後一個方法。

3. 橫豎屏切換時候Activity的生命週期。

答: 

1、不設定Activity的android: configChanges時,切屏會重新呼叫各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次。

2、設定Activity的android: configChanges=“orientation”時,切屏還是會重新呼叫各個生命週期,切橫、豎屏時只會執行一次。

3、設定Activity的android: configChanges=“orientation|keyboardHidden”時,切屏不會重新呼叫各個生命週期,只會執行onConfiguration方法

4. 如何將一個Activity設定成視窗的樣式。

答: 第一種方法,在styles.xml檔案中,可以新建如下的類似Dialog的style。

<style name=“Theme.FloatActivity” parent=“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之間怎麼傳遞資料?

答: 可以在Intent物件中利用Extra來傳遞儲存資料。

在Intent的物件請求中,使用putExtra(“鍵值對的名字”,”鍵值對的值”);在另外一個Activity中將Intent中的請求資料取出來: 

Intent intent = getIntent();

String value = intent.getStringExtra(“testIntent”);

6. 怎麼讓在啟動一個Activity是就啟動一個service?

答: 首先定義好一個service,然後在Activity的onCreate裡面進行連線並bindservice或者直接startService。

7. Activity怎麼和service繫結,怎麼在activity中啟動自己對應的service?

答: 

1、activity能進行繫結得益於Serviece的介面。為了支援Service的繫結,實現onBind方法。

2、Service和Activity的連線可以用ServiceConnection來實現。需要實現一個新的ServiceConnection,重現onServiceConnected和OnServiceDisconnected方法,一旦連線建立,就能得到Service例項的引用。

3、執行繫結,呼叫bindService方法,傳入一個選擇了要繫結的Service的Intent(顯示或隱式)和一個你實現了的ServiceConnection的例項

8.什麼是Service以及描述下它的生命週期。Service有哪些啟動方法,有什麼區別,怎樣停用Service?

答: Android Service是執行在後臺的程式碼,不能與使用者互動,可以執行在自己的程序,也可以執行在其他應用程式程序的上下文裡。需要通過某一個Activity或者Context物件來呼叫。Service有兩個啟動方法,分別是Context.startService()和Context.bindService()。如果在Service執行耗時的操作需要啟動一個新執行緒來執行。

Android Service只繼承了onCreate(), onStart(),onDestroy()三個方法,當我們第一次啟動Service時,先後呼叫onCreate(), onStart()這兩個方法,當停止Service時,則執行onDestroy()方法時。如果Service已經啟動了,當我們再次啟動Service時,不會再執行onCreate()方法,而是直接執行onStart()方法。

9. 什麼時候使用Service?

答: 比如播放多媒體的時候,使用者啟動了其他Activity,這個時候程式要在後臺繼續播放,比如檢測SD卡上檔案的變化,再或者在後臺記錄你的地理資訊位置的改變等等。

10. 請描述一下Intent 和 Intent Filter。

答: Intent在Android中被翻譯為”意圖”,他是三種應用程式基本元件-Activity,Service和broadcast receiver之間相互啟用的手段。在呼叫Intent名稱時使用ComponentName也就是類的全名時為顯示呼叫。這種方式一般用於應用程式的內部呼叫,因為你不一定會知道別人寫的類的全名。而Intent Filter是指意圖過濾,不出現在程式碼中,而是出現在android Manifest檔案中,以<intent-filter>的形式。(有一個例外是broadcast receiver的intent
filter是使用Context.registerReceiver()來動態設定的,其中intent filter也是在程式碼中建立的)

一個intent有action,data,category等欄位。一個隱式intent為了能夠被某個intent filter接收,必須通過3個測試,一個intent為了被某個元件接收,則必須通過它所有的intent filter中的一個。

11. Intent傳遞資料時,可以傳遞哪些型別資料?

答: intent間傳送資料一般有兩種常用的方法: 1、extra 2、data。

extra可以用Intent.putExtra放入資料。新啟動的Activity可用Intent.getExtras取出Bundle,然後用Bundles.getLong,getInt,getBoolean,getString等函式來取放進去的值。

Data則是傳輸url。url可以是指我們熟悉的http,ftp等網路地址,也可以指content來指向ContentProvider提供的資源。Intent.setData可以放入資料,Intent.getData可以取出資料。

12. 說說Activity,Intent,Service是什麼關係 ?

答: 一個Activity通常是一個單獨的螢幕,每一個Activity都被實現為一個單獨的類,這些類都是從Activity基類中繼承而來的。Activity類會顯示由檢視控制元件組成的使用者介面,並對檢視控制元件的事件做出響應。

Intent的呼叫是用來進行螢幕之間的切換。Intent描述應用想要做什麼。Intent資料結構中兩個最重要的部分是動作和動作對應的資料,一個動作對應一個動作資料。

Service是執行在後臺的程式碼,不能與使用者互動,可以執行在自己的程序裡,也可以執行在其他應用程式程序的上下文裡。需要一個Activity或者其他Context物件來呼叫。

Activity跳轉Activity,Activity啟動Service,Service開啟Activity都需要Intent表明意圖,以及傳遞引數,Intent是這些元件間訊號傳遞的承載著。

13. 請描述一下BroadcastReceiver。

答: Broadcast Receiver用於接收並處理廣播通知(broadcast announcements)。多數的廣播是系統發起的,如地域變換、電量不足、來電簡訊等。程式也可以播放一個廣播。程式可以有任意數量的broadcast receivers來響應它覺得重要的通知。Broadcast receiver可以通過多種方式通知使用者: 啟動activity、使用NotificationManager、開啟背景燈、振動裝置、播放聲音等,最典型的是在狀態列顯示一個圖示,這樣使用者就可以點它開啟看通知內容。通常我們的某個應用或系統本身在某些事件(電池電量不足、來電簡訊)來臨時會廣播一個Intent出去,我們利用註冊一個broadcast
receiver來監聽這些Intent並獲取Intent中的資料。

14. 在manifest和程式碼中如何註冊和使用 broadcast receiver 。

答: 在android的manifest中註冊

<receiver android: name =“Receiver1”>

     <intent-filter>

         <!----和Intent中的action對應--->

         <actionandroid: name=“com.forrest.action.mybroadcast”/>

     </intent-filter>

</receiver>

在程式碼中註冊

1、 IntentFilter filter = new IntentFilter(“com.forrest.action.mybroadcast”);//和廣播中Intent的action對應;

2、 MyBroadcastReceiver br= new MyBroadcastReceiver();

3、 registerReceiver(br, filter);

15. 請介紹下ContentProvider是如何實現資料共享的。

答: 一個程式可以通過實現一個Content provider的抽象介面將自己的資料完全暴露出去,而且Content provider是以類似資料庫中的表的方式將自己的資料暴露。Content provider儲存和檢索資料,通過它可以讓所有的應用程式訪問到,這也是應用程式之間唯一共享資料的方法。

要想使應用程式的資料公開化,可通過2種方法:建立一個數據自己的Content Provider或者將你的資料新增到一個已經存在的Content Provider中,前提是有相同資料型別並且有寫入Content Provider的許可權,Android提供了Content Resolverr,外界的程式可以通過Content Resolver介面訪問Content Provider提供的資料。

16. 請介紹下Android的資料儲存方式。

答: Android提供了5中儲存資料的方式,分別是以下幾種

1、使用Shared Preferences儲存資料,用來儲存key-value,pairs格式的資料,它是一個輕量級的鍵值儲存機制,只可以儲存基本資料型別。

2、使用檔案儲存資料,通過FileInputStream和FileOutputStream對檔案進行操作。在Android中,檔案是一個應用程式私有的,一個應用程式無法讀寫其他應用程式的檔案。

3、使用SQLite資料庫儲存資料,Android提供的一個標準資料庫,支援SQL語句。

4、使用Content Provider儲存資料,是所有應用程式之間資料儲存和檢索的一個橋樑,它的作用就是使得各個應用程式之間實現資料共享。它是一個特殊的儲存資料的型別,它提供了一套標準的介面用來獲取資料,操作資料。系統也提供了音訊、視訊、影象和個人資訊等幾個常用的Content Provider。如果你想公開自己的私有資料,可以建立自己的Content Provider類,或者當你對這些資料擁有控制寫入的許可權時,將這些資料新增到Content Provider中實現共享。外部訪問通過Content Resolver去訪問並操作這些被暴露的資料。

5、使用網路儲存資料

17. 請介紹下Android中常用的五種佈局。

答: 最常用的佈局方式為Absolute Layout、Relative Layout、Linear Layout、FrameLayout、TableLayout。其中Linear Layout和Relative Layout是最常用的方式,他們可以通過在xml配置檔案或者程式碼中進行佈局。

1、Frame Layout是最簡單的佈局方式,放置的控制元件都只能羅列到左上角,控制元件會有重疊,不能進行復雜的佈局。

2、Linear Layout可以通過orientation屬性設定線性排列的方向是垂直還是縱向的,每行或每列只有一個元素,可以進行復雜的佈局。

3、Absolute Layout可以讓子元素指定準確的x、y座標值,並顯示在螢幕上。Absolute Layout沒有頁邊框,允許元素之間相互重疊。它是絕對座標,所以在實際中不提倡使用。

4、Relative Layout允許子元素制定他們相對於其他元素或父元素的位置(通過ID制定)。因此,你可以以右對齊,或上下,或置於螢幕中央的形式來排列兩個元素。元素按順序排列,因此如果第一個元素在螢幕的中央,那麼相對於這個元素的其他元素將以螢幕中央的相對位置來排列。這個是相對於Absolute Layout的,採用相對座標,所以在實際中比較常用。

5、Table Layout將以子元素的位置分配到行或列。一個Table Layout由許多的Table Row組成,每個Table Row都會定義一個row。Table Layout容器不會顯示row、column或者cell的邊線框。每個row擁有0個或多個的cell; 和html中的table差不多。在實際中也經常使用。

18. 談談UI中, Padding和Margin有什麼區別?

答: Padding是控制元件的內容相對控制元件的邊緣的邊距,而Margin是控制元件邊緣相對於其他控制元件的邊距。如下圖所示:

19.  android本身的一些限制,比如apk包大小限制,讀取大檔案時的時間限。

答:apk包大小限制不好說,有的apk為100M,還是能裝到手機上。一般的apk大小為5~10M左右。讀取大檔案的時間應該是在main執行緒裡面,時間限制為5秒左右。

20. ListView如何提高其效率?

答:1、使用分頁載入,不要一次性載入所有資料。

2、複用convertView。在getItemView中,判斷converView是否為空,如果不為空,可複用。

3、非同步載入圖片。Item中如果包含有webimage,那麼最好非同步載入。

4、快速滑動時,不顯示圖片。當快速滑動列表(SCROLL_STATE_FLING),item中的圖片或獲取需要消耗資源的view,可以不顯示出來;而處於其他兩種狀態(SCROLL_STATE_IDLE和SCROLL_STATE_TOUCH_SCROLL),則將那些view顯示出來

21. Android程式與Java程式的區別?

區別

Java程式

Android程式

執行入口點

Main

Android Mainfest.xml配置檔案中的intent-filter

UI

Frame·

Activity

是否基於配置檔案

是否基於元件

是Activity,Service,Broadcast Receiver,Content Provider

22. 談談對Android NDK的理解。

答: android NDK是一套工具,允許Android應用開發者嵌入從C、C++原始碼編譯來的本地機器程式碼到各自的應用軟體包中。

1、 NDK是一系列工具的集合。

NDK提供了一系列的工具,幫助開發者快速開發C(或C++)的動態庫,並能自動將so和java應用一起打包成apk。這些工具對開發者幫助時巨大的。

NDK集成了交叉編輯器,並提供了相應的mk檔案隔離CPU、平臺、API等差異,開發人員只需要簡單修改mk檔案(指出“那些檔案需要編譯”、“編譯特性要求”等),就可以創建出so。NDK可以自動將so和Java應用一起打包,極大的減輕了開發人員的打包工作。

2、NDK提供了一份穩定、功能有限的API標頭檔案宣告。這些API支援的功能非常有限,包含有:C標準庫(libc)、標準數學庫(libm)、壓縮庫(libz)、log庫(liblog)。

23. 談談Android的優點和不足之處。

答: 優點如下所示:

1、android是開源、市場佔有率大。

2、android能夠有豐富的硬體選擇。

3、android是一款基於Linux平臺的開源作業系統,從而避免了專利壁壘,是一款完全免費的只能手機平臺。

4、由於android是google開發的,因此能夠無縫結合Google應用。

缺點如下所示:

1、安全與隱私。手機與網際網路緊密聯絡,個人隱私很難得到保守。

24. Android系統中GC什麼情況下會出現記憶體洩露呢?

答: 導致記憶體洩露主要的原因是,先前申請了記憶體空間而忘記了釋放。如果程式中存在無用物件的引用,那麼這些物件就會駐留記憶體,消耗記憶體,因為無法讓垃圾回收器GC驗證這些物件是否不再需要。如果存在物件的引用,這個物件就被定義為“有效的活動”,同時不會被釋放。要確定物件所佔記憶體將被回收,我們就要確認該物件不會再被使用。典型的做法是把物件資料成員設為null或者從集合中移除該物件。當出現以下情況時,會造成記憶體洩露:

1、 資料庫的cursor沒有關閉。

2、 構造adapter時,沒有使用快取contentview。

3、 Bitmap物件不使用時,採用recycle()釋放記憶體。

4、 Activity中的物件的生命週期大於activity。

除錯方法: DDMS==>HEAPSIZE==>dataobject==>[TotalSize]

25. Android UI中的View如何重新整理。

答: Android中對View的更新方式有很多種,使用時要區分不同的應用場合。要分清的是:多執行緒和雙緩衝。

1、不使用多執行緒和雙緩衝

這種情況最簡單,一般只希望View在發生改變時對UI進行重繪。你只需要Activity中顯式呼叫View物件中的invalidate()方法即可。系統會自動呼叫View的onDraw()方法。

2、使用多執行緒和不使用雙緩衝

這種情況下需要開啟新的執行緒,新開的執行緒就不好訪問View物件了。強行訪問的話會報錯:android.view.ViewRoot$ CalledFromWrongThreadException: only theoriginal thread that created a view hierarchy can touch its views。

這時候你需要建立一個繼承了android.os.handler的子類,並重寫handleMessage方法。Android.os.Handle是能傳送和處理訊息的,你需要在Activity中發出更新UI的訊息,然後再你的Handler(可以使用匿名內部類)中處理訊息(因為匿名內部類可以訪問父類變數,你可以直接呼叫View物件中的invalidate()方法。也就是說:在新執行緒中建立併發送一個Message,然後在主執行緒中捕獲、處理該訊息。

3、使用多執行緒和雙緩衝

Android的SurfaceView是View的子類,她同時也實現了雙緩衝。你可以定義一個她的子類並實現Surfaceholder.Callback介面。由於SurfaceHolder.Callback介面,新執行緒就不要android.os.Handler幫忙了。SurfaceHolder中lockCanvas()方法可以鎖定畫布,繪製完新的影象後呼叫unlockCanvasand Post解鎖。

 (來自威哥幹Java的微信文章)

相關推薦

常見Android試題答案(詳細整理)

以下是一些常用的Android面試題及答案,有需要沒需要都可以備著,希望能幫到大家。 1. 請描述一下Activity 生命週期。 答: 如下圖所示。共有七個周期函式,按順序分別是: onCreate(), onStart(), onRestart(), onResu

面試必備,java常見基礎試題答案整理

大家好,今天為大家帶來了常見的面試題整理的分享。 1、面向物件的特徵有哪些方面 1.抽象: 抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是

面試必備,java常見基礎試題答案

1、面向物件的特徵有哪些方面 1.抽象: 抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是資料抽象。 2.繼承: 繼承是一種聯結類的層次模

98道常見Hadoop試題答案解析

1.3 下列哪個程式通常與 NameNode 在一個節點啟動?a)SecondaryNameNodeb)DataNodec)TaskTrackerd)Jobtracker答案 D,此題分析:hadoop 的叢集是基於 master/slave 模式,namenode 和 jobtracker 屬於 mast

redis常見試題答案

memcach 也會 收集 空間 失效 java 特性 消息 切換 1、什麽是Redis? 2、Redis相比memcached有哪些優勢? 3、Redis支持哪幾種數據類型? 4、Redis主要消耗什麽物理資源? 5、Redis的全稱是什麽? 6、Redis有哪

Android 高級試題答案

進行 nag 虛擬 系統架構 httputil 權重 inter 限制 管道 閱讀目錄 1.如何對 Android 應用進行性能分析 2.什麽情況下會導致內存泄露 3.如何避免 OOM 異常 4.Android 中如何捕獲未捕獲的異常 5.ANR 是什麽?

Redis試題答案整理

1、什麼是Redis?簡述它的優缺點? Redis的全稱是:Remote Dictionary.Server,本質上是一個Key-Value型別的記憶體資料庫,很像memcached,整個資料庫統統載入在記憶體當中進行操作,定期通過非同步操作把資料庫資料flush到硬碟上進行儲存。 因為是純

近5年常考Java試題答案整理(一)

下列面試題都是在網上收集的,本人抱著學習的態度找了下參考答案,有不足的地方還請指正,更多精彩內容可以關注我的微信公眾號:Java團長 1、面向物件的特徵有哪些方面? 抽象:將同類物件的共同特徵提取出來構造類。 繼承:基於基類建立新類。 封裝:將資料隱藏起來,對

SSM框架試題答案整理

一、Spring面試題 1、Spring 在ssm中起什麼作用? Spring:輕量級框架 作用:Bean工廠,用來管理Bean的生命週期和框架整合。 兩大核心:①. IOC/DI(控制反轉/依賴注入) :把dao依賴注入到service層,service層反轉給action層,S

2019最新大資料試題答案整理

大資料面試題總結一波,助力準備在金三銀四尋找好工作的小夥伴們,只有度過筆試這一關才能在下面的關卡中大展巨集圖! 一、如何檢查namenode是否正常執行?重啟namenode的命令是什麼? 通過節點資訊和瀏覽器檢視,通過指令碼監控 hadoop-daemon.sh start namenod

近5年常考Java試題答案整理(三)

近5年常考Java面試題及答案整理(一) 近5年常考Java面試題及答案整理(二) 下列面試題都是在網上收集的,本人抱著學習的態度找了下參考答案,有不足的地方還請指正,更多精彩內容可以關注我的微信公眾號:Java團長 68、Java中如何實現序列化,有什麼意義? 答:序

近5年常考Java試題答案整理(二)

上一篇:近5年常考Java面試題及答案整理(一) 下列面試題都是在網上收集的,本人抱著學習的態度找了下參考答案,有不足的地方還請指正,更多精彩內容可以關注我的微信公眾號:Java團長 31、String s = new String("xyz");建立了幾個字串物件? 答:

2018年最新Java試題答案整理(持續完善中…)

下列面試題都是在網上收集的,本人抱著學習的態度找了下參考答案,有不足的地方還請指正 基礎篇 基本功 面向物件特徵 封裝,繼承,多型和抽象 封裝 封裝給物件提供了隱藏內部特性和行為的能力。物件提供一些能被其他物件訪問的方法來改 變它內部的資料。在 Ja

Java -- 最詳細基礎部分試題答案(需更深入瞭解)

Java基礎方面: 1、作用域public,private,protected,以及不寫時的區別答:區別如下:作用域           當前類同一package     子孫類其他packagepublic              √                √  

.net試題,各大企業常見的.net試題答案(精華)

隨著.net平臺開發的職位的增加,筆試、面試也越來越有“套路”,這裡我總結了一些面試題,多數是.net的基礎知識,適合於面試新人。經過本人最近的面試和對面試資料的一些彙總,準備記錄這些面試題,以便.net開發工程師找工作複習之用,本人希望有面試經驗的同學能和我同時完成這個模

Android 高階試題答案

一 效能優化 回到頂部 1.如何對 Android 應用進行效能分析 android 效能主要之響應速度 和UI重新整理速度。 首先從函式的耗時來說,有一個工具TraceView 這是androidsdk自帶的工作,用於測量函式耗時的。 UI佈局的分析,可以有2塊,一塊就是Hierarchy Viewer

常見的Kafka試題答案

本文為您盤點最常見的Kafka面試題,同時也是對Apache Kafka初學者必備知識點的一個整

10個最常見的 HTML5 試題答案

<video width=”450″ height=”340″ controls>       <source src=”jamshed.mp4″ type=”video/mp4″>       <source src=”jamshed.ogg” type=”video/ogg”

Linux試題,淺析常見Linux命令試題答案

日誌 ctrl 信息 任務 linux面試 推薦 wap 執行c 一個 對於Linux面試來說如果面試官問到你不會的問題,你就說這個不太熟悉,沒有具體研究過,千萬別不懂裝懂,還扯一堆沒用的話題來掩飾,這樣只會讓面試官反感你。 另外盡可能多的記住原理性的知識,一般面試問的多的

PHP試題答案解析(8)—PHP綜合應用題

java應用程序 外殼 sleep 服務應用程序 解釋 源碼 use lee eve 1.寫出下列服務的用途和默認端口。 ftp、ssh、http、telnet、https ftp:File Transfer Protocol,文件傳輸協議,是應用層的協議,它基於傳輸層,