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