Android开发经典笔试面试题汇总(持续更新中)
A. onDestroy()
B. onClear()
C. onFinish()
D. onStop()
理解:正確銷毀線程的方法應(yīng)該是handler.removeCallBacks()。
2.SharedPreferences保存文件的路徑和擴展名是:/data/data/package_name/shared_prefs/
*.xml.
3.Android的自己主動恢復(fù)功能可以完畢?(D)
A.回復(fù)地址簿
B.修復(fù)丟失的文字信息
C.回復(fù)刪除的信息
D.恢復(fù)備份設(shè)置和數(shù)據(jù)來又一次安裝程序
4.為滿足線程間通信,Android提供了(A)
A.Handler和Looper
B.Handler
C.Message Queue
D.Looper
理解:Android提供了Handler和Looper來滿足線程間通信,Handler先進先出原則。Looper類用來管理特定線程內(nèi)對象之間的消息交換(MessageExchange)。
1)Looper:一個線程能夠產(chǎn)生一個Looper對象。由他來管理此線程里的MEssageQueue(消息隊列)
2)Handler:能夠構(gòu)造Handler對象來與Looper溝通,以便push新消息到MessageQueue,或者接收Looper從Message Queue取出所送來的消息。
3)Message Queue:用來存放線程放入的消息;
4)UIThread就是主線程,Android啟動時會建立一個MessageQueue.
5.以下哪種進程最重要,最后被銷毀?(D)
A.服務(wù)進程
B.后臺進程
C.可見進程
D.前臺進程
理解:重要性依次是:前臺進程、可見進程、服務(wù)進程、后臺進程、空進程。所以銷毀的順序為逆方向。
6.在Android中,在屏幕密度為160時,1pt大概等于(B)sp。
A.1.22
B.2.22
C.2.12
D.1.12
理解:在Android中,1pt大概等于2.22sp。
Android支持下列全部單位:?1)px (像素):屏幕上的點;
2)in(英寸):長度單位;
3)mm(毫米):長度單位;
4)pt(磅):1/72英寸
5)dp(與密度無關(guān)的像素):一種基于屏幕密度的抽象單位。
在每英寸160點的顯示器上,1dp=1px;
6)dip? (同dp)
7)sp (與刻度無關(guān)的像素):與dp類似,可是能夠依據(jù)用戶字體大小首選項進行縮放。
Apk的資源包中:
當屏幕density=240時。使用hdpi標簽的資源。
當屏幕density=160時,使用mdpi標簽的資源。
當屏幕density=120時。使用ldpi標簽的資源;
(1)在屏幕密度為160時,1dp=1px=1dip,??? 1pt=160/72sp,????? 1pt=1/72英寸。
(2)當屏幕密度為240時,1dp=1dip=1.5px
7.通過Intent傳遞一些二進制數(shù)據(jù)的方法:
1)使用Serializable接口實現(xiàn)序列化,這是java經(jīng)常使用的方法;
2)實現(xiàn)Parcelable接口,這里Android的部分分類比方Bitmap類已經(jīng)實現(xiàn)了,同一時候Parcelable在Android? AIDL中交換數(shù)據(jù)也非經(jīng)常見。
8.以下屬于Android的動畫分類的有?(A B)
A. Tween
B. Frame
C. Draw
D. Animation
理解:Tween動畫,能夠使視圖組件移動、縮放、旋轉(zhuǎn)、透明度變化;
Frame動畫:通過順序的播放排列好的圖片來實現(xiàn),類似電影;
9.下列關(guān)于數(shù)據(jù)持久化的描寫敘述正確的有:(BD)
A. 在內(nèi)存中緩存多個Bitmap對象是一種數(shù)據(jù)持久化方法
B. SQLite數(shù)據(jù)庫文件能夠保存在SD卡中
C. ContentProvider的主要目的是為了將Android應(yīng)用的數(shù)據(jù)持久化
D. 數(shù)據(jù)持久化就是將內(nèi)存的數(shù)據(jù)保存到外存
10.將一個Activity設(shè)置成窗體樣式,僅僅須要設(shè)置Theme就可以。
11.Intent傳遞數(shù)據(jù)時。下列的數(shù)據(jù)類型不能夠被傳遞的是(D)
A. Serializable
B. File
C. Parcelable
D. Thread
12.Android DVM的進程和Linux的進程,下面說法錯誤的是(D)
A.它們都是進程的一種
B. dvm是Android的虛擬機
C. Linux的進程是程序的詳細實現(xiàn)。是運行程序的過程
D. dvm中能夠創(chuàng)建多個進程來處理應(yīng)用間的同步問題
理解:每個Android應(yīng)用程序都在它自己的進程中執(zhí)行。都擁有一個獨立的Dalvik虛擬機實例,每個DVM都是在Linux中的一個進程。
13.Toast顯示時長默認僅僅有2種,分別為Toast.LENGTH_LONG和Toast.LENGTH_SHORT.
分別為2s和3.5s。其它的值都是無效的。
API文檔盡管寫的第三個參數(shù)是時間。可是Framework做了重定義,限定了2s和3.5s兩個值。
14.下列哪些情況下,系統(tǒng)可能會彈出ANR對話框(ABC)
A.在Activity中,Main線程消息隊列中的消息在5s內(nèi)沒有得到對應(yīng)
B.在Service中,onStartCommand()方法運行超過5s
C.在BroadcastReceive中。onReceive()方法運行時間超過10s
D.在啟動的新線程中。run()方法運行時間超過5s
理解:ANR:Application Not Responsing
1)UI線程堵塞時間超過5s會ANR。
2)Service屬于主線程,耗時操作要開啟子線程
3)在BroadcastReceive中,onReceive的生命周期為10s,所以里面的操作不能超過10s
15.在Android中使用Menu時可能須要重寫的方法有(AC)
A. onCreateOptionsMenu()
B. onCreateMenu()
C. onOptionsItemSelected()
D. onItemSelected()
理解:一個是創(chuàng)建菜單的方法,一個是菜單項點擊事件的方法。
16.下列關(guān)于IntentService與Service的關(guān)系描寫敘述錯誤的是(CD)
A. IntentService是Service的子類
B. IntentService在執(zhí)行時會啟動新的線程來執(zhí)行任務(wù)
C. 啟動方式不同
D.沒有差別
理解:IntentService是繼承Service的,包括了Service的所有特性,也包括了Service的生命周期,那么與Service不同的是。IntentService在運行onCreate()操作時候,內(nèi)部開了一個線程,去運行耗時操作。
IntentService和Service的啟動方式同樣。都是通過startService()方法。
17.在多個應(yīng)用中讀取共享存儲數(shù)據(jù)時,須要用到query()方法,這是哪個對象的方法(A)
A. ContentResolver
B. ContentProvider
C. Cursor
D. SQLiteHelper
理解:ContentResolver和ContentProvider是一對。
一個執(zhí)行在提供數(shù)據(jù)端(provider),一個執(zhí)行在調(diào)用端(resolver).使用的時候利用resolver(query,insert,update)來調(diào)用provider的方法。然后provider再進行數(shù)據(jù)查詢。
18.關(guān)于ServiceConnection接口的onServiceConnected()方法的觸發(fā)條件描寫敘述正確的是(B)
A. bindService()方法運行成功后
B. bindService()方法運行成功同一時候onBInd()方法返回非空IBinder對象
C. Service的onCreate()方法和onBind()方法運行成功后
D. Service的onCreate()和onStartCommand()方法啟動成功后
19.Android中使用SQLiteOpenHelper這個輔助類時。能夠生成一個數(shù)據(jù)庫,并能夠?qū)?shù)據(jù)庫版本號進行管理的方法能夠是(AB)
A. getWriteableDatabase()
B. getReadableDatabase()
C. getDatabase()
D. getAbleDatabase()
20.下面關(guān)于Toast說法正確的是(BD)
A. Toast能編輯
B. Toast沒有焦點
C. Toast能夠獲得用戶輸入
D. Toast僅僅能持續(xù)一段時間
理解:Toast能夠由程序猿自己定義,可是用戶是不能編輯的。用戶也無法輸入。
注意:可編輯和自己定義的概念是不同的。
Toast和Dialog不同,Toast是沒有焦點的。
21.在一個ListView中。顯示的布局有多種不同的形式。比如某些行僅僅有ImageView,而另外一些行僅僅有TextView.須要重寫哪幾個方法?(ABCD)
A. getCount()
B. getItemId()
C. getItemViewType()
D. getViewTypeCount()
22.前臺進程(Foreground)最重要,通常最后被銷毀
與用戶當前正在做的事情密切相關(guān)。不同的應(yīng)用程序組件可以通過不同的方法使它的宿主進程移到前臺。當以下不論什么一個條件滿足時,可以考慮將進程移到前臺:
1)進程正在執(zhí)行一個與用戶交互的Activity,它的onResume()方法被調(diào)用
2)進程有一個Service,該Service相應(yīng)的Activity正在與用戶交互
3)進程有一個Service被調(diào)用startForeground()方法,要求到前臺來運行
4)進程有一個Service,而且在Service的某個回調(diào)函數(shù)(onCreate(),onStart(),onDestroy())內(nèi)有正在運行的代碼
5)進程有一正在執(zhí)行的BroadcastReceiver,它的onReceive()方法正在執(zhí)行。
23.以下關(guān)于Android中定義style和theme的描寫敘述正確的是(AD)
A.都能夠降低反復(fù)屬性設(shè)置
B. style能夠作用在Activity上
C. theme能夠繼承
D. 一個TextView的style中定義了textColor屬性。TextView本身也設(shè)置textColor屬性。那么TextView本身定義的優(yōu)先級較高。
理解:theme被final標記了。不能被繼承;
24.下列對Android NDK的理解正確的是(ABCD)
A. NDK是一系列工具的集合
B. NDK提供了一份穩(wěn)定、功能有限的API頭文件聲明
C. 使“java+C”的開發(fā)方式最終轉(zhuǎn)正,成為官方支持的開發(fā)方式
D. NDK將是Android平臺支持C開發(fā)的開端
25.以下那條語句能夠構(gòu)造正確的對話框(BC)
A. AlertDialog dialog = new AlertDialog(context)
B. AlertDialog.Builder builder = new AlertDialog.Builder(context)
C. ProgressDialog dialog = new ProgressDialog(context)
D. ProgressDialog.Builder builder = new ProgressDialog.Builder(context)
理解:AlertDialog的構(gòu)造方法被聲明為protected。所以不能直接使用new keyword來創(chuàng)建AlertDialog類的對象實例。要想創(chuàng)建AlertDialog對話框,須要使用Builder類,該類是AlertDialog類中定義的一個內(nèi)嵌類。
因此必須創(chuàng)建AlertDialog.Builder類的對象實例。
26.下列哪些情況系統(tǒng)會彈出Force Close對話框(BC)
A. 應(yīng)用執(zhí)行時,Main線程進行了耗時操作
B. 應(yīng)用執(zhí)行時拋出了OutOfMemoryError
C. 應(yīng)用執(zhí)行時拋出了RuntimeException
D. 應(yīng)用執(zhí)行時。用戶操作過于頻繁
理解:注意區(qū)分ANR 和 Force Close。
A D會導(dǎo)致ANR。
27.Android中MVC模式C層指的是?(A)
A. Activity
B. Service
C. Content
D. Intent
理解:Android控制層的任務(wù)一般就是Activity來完畢。
視圖層相應(yīng)了Android中的View,也能夠理解為布局或者控件。
28.RemoteView在哪些功能中使用?(BD)
A. Toast
B. AppWidget
C. ListView
D. Notification
29.關(guān)于BroadcastReceiver的說法不對的是(B)
A. 是用來接收廣播Intent的
B. 一個廣播Intent僅僅能被一個訂閱了此廣播的BroadcastReceiver所接收
C. 對有序廣播,系統(tǒng)會依據(jù)接收者聲明的優(yōu)先級別按順序逐個運行接收者
D. 接收者聲明的優(yōu)先級別在<intent-filter>的android:priority屬性中聲明,數(shù)值越大表示優(yōu)先級越高。
30.Android系統(tǒng)對下列哪些對象提供了資源池(AC)
A. Message
B. Thread
C. Async Task
D. Looper
理解:
Message提供了消息池。有靜態(tài)方法Obtain從消息池中取對象;
Thread默認不提供資源池,除非使用線程池ThreadPool管理;
AsyncTask是線程池改造的,默認提供最多5個線程進行并發(fā)操作;
Looper創(chuàng)建時創(chuàng)建一個消息隊列和線程對象。也不是資源池;
31.Android中的R.java不能夠手動改動。
?理解:自己主動生成,無法改動。
改動后編譯器也會自己主動改回去。
32.Android DVM的進程和Linux的進程。應(yīng)用程序的進程是否為同一個概念?? 【是】
理解:DVM指dalvik虛擬機,每一個Android程序都有一個獨立的dvm實例,每一個Android應(yīng)用程序都在他自己的進程中執(zhí)行。
而一個dvm實例都是作為Linux的進程運行的。能夠覺得是一個概念。
補充:Dalvik是Google公司自己設(shè)計用于Android平臺的java虛擬機。每個Dalvik應(yīng)用作為一個獨立的Linux進程運行。獨立的進程能夠防止在虛擬機崩潰的時候全部程序都被關(guān)閉。
33.下列關(guān)于Android數(shù)字簽名描寫敘述錯誤的是:(C)
A.全部的應(yīng)用程序都必須有數(shù)字證書。Android系統(tǒng)不會安裝一個沒有數(shù)字證書的應(yīng)用程序
B.Android程序包使用的數(shù)字證書能夠是自簽名的,不須要一個權(quán)威的數(shù)字證書機構(gòu)簽名認證
C.假設(shè)要正式公布一個Android程序,能夠使用集成開發(fā)工具生成的調(diào)試證書來公布
D.數(shù)字證書都是有有效期的。Android僅僅是在應(yīng)用程序安裝的時候才會檢查證書的有效期。假設(shè)程序已經(jīng)安裝在系統(tǒng)中,即使證書過期也不會影響程序的正常功能。
理解:必需要使用一個合適的私鑰生成的數(shù)字證書給程序簽名,而不能使用adt插件或者ant工具生成的調(diào)試證書來公布。
由于集成工具生成的調(diào)試證書不是一個包括開發(fā)人員信息,取得開發(fā)人員授權(quán)的有效私有密鑰。
34.Android中能夠使用System.out.println(“ ”);在控制臺顯示想要的內(nèi)容嗎?【不能】
理解:使用System.out.println(“ ”);語句輸出的內(nèi)容也僅僅會出如今LogCat中。而不會出如今Console控制臺中。顯示的tag為System.out
35.通過startService()和bindService()。下面說法錯誤的是:(C)
A.通過startService()啟動服務(wù):會調(diào)用例如以下生命周期方法:onCreate()-?onStart()-?onDestroy()
B.當採用startService()方法啟動服務(wù),訪問者與服務(wù)是沒有綁定在一起的,訪問者退出,服務(wù)還在執(zhí)行
C.假設(shè)是調(diào)用bindService()啟動服務(wù):會調(diào)用例如以下生命周期方法:onCreate()-?onBInd()-?onDestroy()?onUnbind()
D.採用bindService()方法啟動服務(wù)時, 訪問者與服務(wù)是綁定在一起的,即訪問者退出,服務(wù)也就終止,解除綁定
理解:C:onCreate()?onBind()?onUnbind()?onDestroy()
36.使用AIDL完畢遠程service方法調(diào)用下列說法不對的是(A)
A. AIDL相應(yīng)的接口名稱不能與AIDL文件名稱同樣
B. AIDL的文件的額內(nèi)容類似java代碼
C.創(chuàng)建一個Service(服務(wù)),在服務(wù)的onBind(Intent intent)方法中返回實現(xiàn)了AIDL接口的對象
D. AIDL相應(yīng)的接口的方法前面不能加訪問權(quán)限修飾符
理解:AIDL相應(yīng)的接口名稱必須與AIDL文件名稱同樣,否則無法自己主動編譯;
AIDL相應(yīng)的接口的方法不能加訪問權(quán)限修飾符
37.【騰訊2015春招移動client開發(fā)練習(xí)卷】
Android中Looper的實現(xiàn)原理,為什么調(diào)用Looper.prepare()就在當前線程關(guān)聯(lián)了一個Looper對象。它是怎樣實現(xiàn)的。
理解:
1)線程間通信機制:首先,Looper,Handler,MessageQueue三者共同實現(xiàn)了Android系統(tǒng)里線程間通信機制。
如在A,B兩個子線程之間須要傳遞消息。首先給每一個子線程綁定一套Handler,Looper,MessageQueue機制。然后這三個對象都與各自的線程相應(yīng)。然后A線程通過調(diào)用B線程的Handler對象,發(fā)送消息。這個消息會被Handler發(fā)送到B線程的MessageQueue中, 而屬于B線程的Looper對象一直在循環(huán)無限遍歷MessageQueue,一旦發(fā)現(xiàn)該消息隊列里收到新的消息,就會去對消息進行處理,處理過程中會回調(diào)自身Handler,HandleMessage方法。從而實現(xiàn)了不同線程間通信。
2)Looper實現(xiàn)原理:Looper類里面包括一個消息隊列對象和一個線程對象。
當創(chuàng)建Looper時。會自己主動創(chuàng)建一個消息隊列,同一時候?qū)?nèi)部線程對象指向創(chuàng)建Looper的線程。當開啟Looper后(Looper.loop()),會自己主動進入無限for循環(huán)中,不斷去遍歷消息隊列,假設(shè)沒有消息則堵塞,有消息則回調(diào)Handler的handleMessage()方法進行處理。
3)Looper.prepare():首先,要使用Looper機制通常會在當前線程中創(chuàng)建Handler對象,里面會自己主動創(chuàng)建一個Looper對象和消息隊列,這里面的消息隊列屬于當前線程空間。但此時的Looper還不會去遍歷。也沒有綁定到當前線程。
當中,Looper對象內(nèi)部也包括一個空消息隊列對象和空線程。
通過Looper.prepare()方法,先讓該消息隊列指向當前線程的消息隊列。讓空線程也指向當前線程。從而實現(xiàn)了綁定。
38.【騰訊2015春招移動client開發(fā)練習(xí)卷】
簡述Android怎樣處理UI與耗時操作的通信,有哪些方式及各自的優(yōu)缺點。
理解:。。。
AsyncTask本質(zhì)上是一個線程池。全部的異步任務(wù)都會在這個線程池中的工作線程中運行,當須要操作UI界面時,會和工作線程通過Handler傳遞消息。
github主頁:https://github.com/chenyufeng1991? 。
歡迎大家訪問!
總結(jié)
以上是生活随笔為你收集整理的Android开发经典笔试面试题汇总(持续更新中)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mycat 双主 热切换
- 下一篇: Linux+Oracle+12c+RAC