第一篇:Android最全的面試題總結(jié)
一.Java的問題
1.回調(diào)函數(shù)是?有什么用?好處是?一般什么時候用?手寫個例子代碼。
2.Java抽象類是什么?你怎么理解抽象類?為什么要有抽象類?好處,壞處。3.Public,protected,private,默認(rèn) 這四個修飾符的區(qū)別和范圍。4.Java中泛型的概念,如何實現(xiàn)的?
5.Switch中支持的類型(注意string和long)6.內(nèi)部類有幾種?它們的區(qū)別。
7.設(shè)計模式(單例模式,工場方法模式等,它們的優(yōu)缺點(diǎn))8.GC機(jī)制,垃圾的清除算法 9.創(chuàng)建線程的幾種方式 10.多線程的同步問題
11.寫一下socket通信的大致代碼
12.單線程和多線程處理哪個好(分單cup和多cpu)13.虛擬內(nèi)存的概念,內(nèi)存置換算法
14.強(qiáng)連接,軟連接,弱連接,虛連接的概念和使用舉例 15.Android開發(fā)如何進(jìn)行算法和界面的優(yōu)化 16.為什么內(nèi)部類可以直接訪問外邊類的成員
17.外部類可以直接訪問內(nèi)部類的成員嗎?(不能)為什么?那應(yīng)該怎樣實現(xiàn)訪問
18.Hashmap內(nèi)部是怎么實現(xiàn)的,他的動態(tài)內(nèi)存大小怎么變,和hashtable的區(qū)別與聯(lián)系? 19.Hashmap同步嗎?如何實現(xiàn)同步。20.線程之間如何實現(xiàn)通信
21.線程和進(jìn)程的區(qū)別,線程有自己的棧和存儲機(jī)制嗎? 22.Threadlocal知道嗎?作用 23.Jvm和dvm的區(qū)別與聯(lián)系
24.線程池,消息池,常量池的概念 25.棧和堆的區(qū)別
26.Hashmap的遍歷方式有幾種,各種的區(qū)別,手寫下例子代碼 27.Java支持中文嗎?
28.Volatile的作用,是否可靠它實現(xiàn)同步安全? 29.如何實現(xiàn)同步
30.Android的動畫實現(xiàn)有哪幾種方式,區(qū)別 31.Java中繼承有哪些特征 32.抽象類和接口的區(qū)別
33.Exception的概念,運(yùn)行時,非運(yùn)行時的區(qū)別 34.Java中一次跳出多個循環(huán)的方式 35.死鎖的概念和必要條件,解決方法 36.Tcp和udp的區(qū)別
37.Tap的3次握手過程,大概畫一畫 38.內(nèi)部碎片與外部碎片的概念和區(qū)別 39.反射機(jī)制
40.C++與java的區(qū)別
二.Android的問題
41.android中內(nèi)存泄露是?產(chǎn)生原因?解決方法? 42.Android中內(nèi)存溢出是?產(chǎn)生原因?解決方法?它和內(nèi)存泄露有什么區(qū)別? 43.Activity的生命周期,三種狀態(tài) 44.Activity的4種啟動模式 45.Android的四大組件 46.說說intent 47.Androidmanifest的作用
48.Android系統(tǒng)有幾層,了解application framework層嗎? 49.Service的啟動方式和它們的區(qū)別
50.用過自定義控件沒?怎么實現(xiàn)自定義控件,手寫下例子代碼。
51.知道Fragment嗎?哪個版本出的?它和activity的區(qū)別,它的生命周期?用它的好處?它和activity如何實現(xiàn)通信,相互調(diào)用。
52.Fragment怎么實習(xí)按back鍵進(jìn)行回退而不是一次性退出它所依附的activity? 53.Android如何實現(xiàn)定時器(timer,alarmManager)54.handler機(jī)制的概念,應(yīng)用
55.Handler如何實現(xiàn)定時器效果(3種)56.兩個activity之間如何通信(各種方式)57.用過eclipse的debug調(diào)試沒?怎么用的 58.知道多少eclipse的快捷鍵 59.結(jié)束一個進(jìn)程的幾種方式? 60.進(jìn)程間如何實現(xiàn)通信
61.Android如何實現(xiàn)信息存儲
62.知道volley等一些第三方庫嗎? 63.Android對view的更新方式 64.知道一些代碼優(yōu)化的方式嗎? 65.Handler和thread的區(qū)別
66.Android中http訪問的兩種方式
67.Asynctask的概念,作用,與handler的區(qū)別 68.Android中如何實現(xiàn)畫圖,手寫個簡單的例子 69.一個子線程是否可用直接修改ui界面?為什么 70.Service和Intentservice的區(qū)別與聯(lián)系 71.Context是什么?
72.Boardcast的概念,作用,有序廣播和無序廣播的區(qū)別,粘性廣播的概念 73.Boardcast的靜態(tài)注冊和動態(tài)注冊的區(qū)別 74.Aidl,如何實現(xiàn)進(jìn)程間通信 75.Contentprovider概念和作用
76.Json比xml的好處,他們的區(qū)別
77.Listview的概念,優(yōu)化,如何實現(xiàn)每項的布局不同 78.Touch事件的分發(fā)過程
79.Linearlayout的Weight屬性的作用
80.Android有哪幾種布局,它們的5種布局的區(qū)別 81.Finish和exit(0)的區(qū)別 82.Sqlite的事務(wù)處理
83.Android實現(xiàn)可滑動tab的3種方式,它們的區(qū)別和各種的好處 84.Android中跨進(jìn)程通信的4種方式,(正好對應(yīng)四大組件)85.Handler的內(nèi)存泄露是?
86.Android系統(tǒng)提供的與用戶交互的兩種機(jī)制(回調(diào)函數(shù),監(jiān)聽器)87.Ndk的理解,jni的理解
88.Toast的概念,它的時間設(shè)置的兩種方式 89.Activity的狀態(tài)保存的方式 90.Activity的5個進(jìn)程等級 91.Surface了解嗎?
92.程序閃退的原因有哪些,怎么解決 93.Get和post的區(qū)別
94.Android有哪三種菜單?區(qū)別
95.實現(xiàn)序列化的兩種方式,比較它們的優(yōu)缺點(diǎn) 96.Broadcast receiver的生命周期
97.Sharedpreference的作用,底層實現(xiàn)
98.如何實現(xiàn)一個前臺的service,簡單寫下代碼例子 99.按home鍵activity的生命周期變化
100.Activity由a跳到b,哪些生命周期會執(zhí)行
101.橫豎屏切換,activity的生命周期,configchange的應(yīng)用 102.如何設(shè)置activity為對話框風(fēng)格
103.Activity,window,view的聯(lián)系和區(qū)別 104.Style和theme的聯(lián)系和區(qū)別
105.知道android平臺主流的幾種消息推送方式嗎? 106.Viewstub的概念,作用,好處 107.Android數(shù)字簽名 108.Zygote的概念
109.Adb的概念,作用。Adb死掉了怎么辦? 110.Ddms和teaceview的區(qū)別,他們的作用 111.MVC模式概念
112.Android的事件傳遞機(jī)制 113.圖片的緩存機(jī)制
114.Android內(nèi)存優(yōu)化及管理
115.如何實現(xiàn)低版本可用高版本的新的東西 116.Gallery畫廊的使用 117.http如何實現(xiàn)長連接
118.Android是不是linux?為什么? 119.三.算法和寫代碼
74.寫數(shù)的后序遍歷(非遞歸)75.實現(xiàn)一個字符串的全排列 76.快速排序,堆排序,歸并排序
77.如何在大量數(shù)據(jù)中快速找到中位數(shù)? 78.如何判斷一個數(shù)是不是2的n次方
第二篇:android面試題
選擇題(包括多選)
1.下列哪些語句關(guān)于內(nèi)存回收的說明是正確的?
A、程序員必須創(chuàng)建一個線程來釋放內(nèi)存
B、內(nèi)存回收程序負(fù)責(zé)釋放無用內(nèi)存
C、內(nèi)存回收程序允許程序員直接釋放內(nèi)存
D、內(nèi)存回收程序可以在指定的時間釋放內(nèi)存對象
2.下面異常是屬于Runtime Exception 的是
A、ArithmeticException
B、IllegalArgumentException
C、NullPointerException
D、BufferUnderflowException
3.Math.round(-11.5)等于多少
A、11 ,-11
B、11 ,-12
C、12 ,-11
D、12 ,-1
24.下列程序段的輸出結(jié)果是:
void complicatedexpression_r(){
int x=20, y=30;
boolean b;
b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;
System.out.println(b);
}
A、true
B、false
C、1
D、011.activity
5.對一些資源以及狀態(tài)的操作保存,最好是保存在生命周期的哪個函數(shù)中進(jìn)行
A、onPause()
B、onCreate()
C、onResume()
D、onStart()
6.Intent傳遞數(shù)據(jù)時,下列的數(shù)據(jù)類型哪些可以被傳遞
A、Serializable
B、charsequence
C、Parcelable
D、Bundle
7.android 中下列屬于Intent的作用的是
A、實現(xiàn)應(yīng)用程序間的數(shù)據(jù)共享
B、是一段長的生命周期,沒有用戶界面的程序,可以保持應(yīng)用在后臺運(yùn)行,而不會因為切換頁面而消失
C、可以實現(xiàn)界面間的切換,可以包含動作和動作數(shù)據(jù),連接四大組件的紐帶
D、處理一個應(yīng)用程序整體性的工作
8.下列屬于SAX解析xml文件的優(yōu)點(diǎn)的是
A、將整個文檔樹在內(nèi)存中,便于操作,支持刪除,修改,重新排列等多種功能
B、不用事先調(diào)入整個文檔,占用資源少
C、整個文檔調(diào)入內(nèi)存,浪費(fèi)時間和空間
D、不是長久駐留在內(nèi)存,數(shù)據(jù)不是持久的,事件過后,若沒有保存數(shù)據(jù),數(shù)據(jù)就會
消失
9.在android中使用SQLiteOpenHelper這個輔助類時,可以生成一個數(shù)據(jù)庫,并可以對數(shù)據(jù)庫版本進(jìn)行管理的方法可以是()
A、getWriteableDatabase()
B、getReadableDatabase()
C、getDatabase()
D、getAbleDatabase()
10.android 關(guān)于service生命周期的onCreate()和onStart()說法正確的是
A、當(dāng)?shù)谝淮螁拥臅r候先后調(diào)用onCreate()和onStart()方法
B、當(dāng)?shù)谝淮螁拥臅r候只會調(diào)用onCreate()方法
C、如果service已經(jīng)啟動,將先后調(diào)用onCreate()和onStart()方法
D、如果service已經(jīng)啟動,只會執(zhí)行onStart()方法,不在執(zhí)行onCreate()方法
11.下面是屬于GLSurFaceView特性的是
A、管理一個surface,這個surface就是一塊特殊的內(nèi)存,能直接排版到android的視圖view上。
B、管理一個EGL display,它能讓opengl把內(nèi)容渲染到上述的surface上。
C、讓渲染器在獨(dú)立的線程里運(yùn)作,和UI線程分離。
D、可以直接從內(nèi)存或者DMA等硬件接口取得圖像數(shù)據(jù)
12.下面在AndroidManifest.xml文件中注冊BroadcastReceiver方式正確的A、
android:name=“android.provider.action.NewBroad”/> B、 android:name=“android.provider.action.NewBroad”/> C、 android:name=“android.provider.action.NewBroad”/> D、 android:name=“android.provider.action.NewBroad”/> 13.關(guān)于ContenValues類說法正確的是 A、他和Hashtable比較類似,也是負(fù)責(zé)存儲一些名值對,但是他存儲的名值對當(dāng)中的名是String類型,而值都是基本類型 B、他和Hashtable比較類似,也是負(fù)責(zé)存儲一些名值對,但是他存儲的名值對當(dāng)中的名是任意類型,而值都是基本類型 C、他和Hashtable比較類似,也是負(fù)責(zé)存儲一些名值對,但是他存儲的名值對當(dāng)中的名,可以為空,而值都是String類型 D、他和Hashtable比較類似,也是負(fù)責(zé)存儲一些名值對,但是他存儲的名值對當(dāng)中的名是String類型,而值也是String類型 14.我們都知道Hanlder是線程與Activity通信的橋梁,如果線程處理不當(dāng),你的機(jī)器就會變得越慢,那么線程銷毀的方法是 A、onDestroy() B、onClear() C、onFinish() D、onStop() 15.下面退出Activity錯誤的方法是 A、finish() B、拋異常強(qiáng)制退出 C、System.exit() D、onStop() 16.下面屬于android的動畫分類的有 A、Tween B、Frame C、Draw D、Animation 17.下面關(guān)于Android dvm的進(jìn)程和Linux的進(jìn)程,應(yīng)用程序的進(jìn)程說法正確的是 A、DVM指dalivk的虛擬機(jī).每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,不一定擁有一個獨(dú)立的Dalvik虛擬機(jī)實例.而每一個DVM都是在Linux中的一個進(jìn)程,所以說可以認(rèn)為是同一個概念.B、DVM指dalivk的虛擬機(jī).每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,不一定擁有一個獨(dú)立的Dalvik虛擬機(jī)實例.而每一個DVM不一定都是在Linux中的一個進(jìn)程,所以說不是一個概念.C、DVM指dalivk的虛擬機(jī).每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個獨(dú)立的Dalvik虛擬機(jī)實例.而每一個DVM不一定都是在Linux中的一個進(jìn)程,所以說不是一個概念.D、DVM指dalivk的虛擬機(jī).每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個獨(dú)立的 Dalvik虛擬機(jī)實例.而每一個DVM都是在Linux中的一個進(jìn)程,所以說可以認(rèn)為是同一個概念.18.Android項目工程下面的assets目錄的作用是什么 A、放置應(yīng)用到的圖片資源。 B、主要放置多媒體等數(shù)據(jù)文件 C、放置字符串,顏色,數(shù)組等常量數(shù)據(jù) D、放置一些與UI相應(yīng)的布局文件,都是xml文件 19.關(guān)于res/raw目錄說法正確的是 A、這里的文件是原封不動的存儲到設(shè)備上不會轉(zhuǎn)換為二進(jìn)制的格式 B、這里的文件是原封不動的存儲到設(shè)備上會轉(zhuǎn)換為二進(jìn)制的格式 C、這里的文件最終以二進(jìn)制的格式存儲到指定的包中 D、這里的文件最終不會以二進(jìn)制的格式存儲到指定的包中 20.下列對android NDK的理解正確的是 A、NDK是一系列工具的集合B、NDK 提供了一份穩(wěn)定、功能有限的 API 頭文件聲明。 C、使 “Java+C” 的開發(fā)方式終于轉(zhuǎn)正,成為官方支持的開發(fā)方式 D、NDK 將是 Android平臺支持 C 開發(fā)的開端 問答題: 1.系統(tǒng)上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?請說明原由。 2.Activity和Task的啟動模式有哪些? 每種含義是什么? 3.SQLite支持事務(wù)嗎? 添加刪除如何提高性能? 4.對Intent、Activity、廣播、Service等的理解 5、handler機(jī)制的原理 Android面試題總結(jié) 1.簡述Activity的生命周期? 1)Activity的生命周期通過7個生命周期方法onCreate(),onRestart(), onStart(), onResume(), onPause(),onStop(),onDestroy()來體現(xiàn)。2)其中6個生命周期方法是成對對應(yīng)起來的,哪里創(chuàng)建的對象,一般應(yīng)該在其對應(yīng)的方法中銷毀。 onCreate()--onDestroy()onStart()--onStop()onResume()--onPause()3)當(dāng)程序啟動之后,第一個Activity經(jīng)過的生命周期方法是:onCreate()→onStart()→ onResume()方法,當(dāng)?shù)谝粋€Activity A啟動第二個Activity B的時候(備注:第二個Activity完全遮蓋住第一個Activity,并且這個過程中沒有出現(xiàn)點(diǎn)擊Home鍵,或者第一個Activity被殺死等異常情況,并且兩個Activity的啟動模式是標(biāo)準(zhǔn)模式),這兩個Activity經(jīng)歷的生命周期方法是: A onPause()→ B onCreate()→ B onStart()→ B onResume()→ A onStop()→(此時Activity A已經(jīng)在回退棧的最低端,Activity B已經(jīng)在Activity A的上面,在回退棧的最頂端)當(dāng)通過點(diǎn)擊后退鍵退出Activity B的時候: (此時Activity B 彈出回退棧)→ B onPause()→ A onRestart()→ A onStart()→ A onResume()→ B onStop()→ B onDestroy()此時B 被銷毀 2.簡述Service的生命周期? 1).如果在Activity中通過調(diào)用startService()方法啟動一個Service的話,那么生命周期是: onCreate()→ onStartCommand()→ 運(yùn)行中 →(如果自己或者客戶端(如Activity)調(diào)用了stop Service的方法的話)→ onDestroy()2).如果在Activity中通過調(diào)用bindService()方法啟動一個Service的話,那么生命周期是: onCreate()→ onBind()→ 運(yùn)行中 →(如果有客戶端(Activity)調(diào)用了unBindService()方法與Service解除綁定時)→ onUnbind()→ onDestroy()3.有幾種控件布局的方式? 1)RelativeLayout:相對布局,可以根據(jù)相對位置來調(diào)整控件的位置。推薦使用相對布局,更利于屏幕的自適應(yīng)。2)LinearLayout:線性布局,控件之間的水平排列或者垂直排列。但是如果要想構(gòu)建復(fù)雜布局,要進(jìn)行多層的LinearLayout布局嵌套,但是這樣會運(yùn)行布局載入效率。 3)FrameLayout:幀布局,控件與控件之間處于上下疊加的狀態(tài)。 備注:還有兩個已經(jīng)不怎么用的布局:TableLayout:表格布局 AbsoluteLayout 絕對布局。 布局實現(xiàn)方式有兩種:xml文件靜態(tài)實現(xiàn),代碼動態(tài)實現(xiàn)。 一般xml文件中可以實現(xiàn)布局控制的話,就不建議放在代碼中實現(xiàn)布局控制,因為在xml文件中實現(xiàn)布局控制,可以做到布局與代碼分離。4.有幾種數(shù)據(jù)存儲方式,分別是什么? 1)SQLite數(shù)據(jù)庫存儲結(jié)構(gòu)化數(shù)據(jù)。 2)文件存儲:分為內(nèi)部存儲和外部存儲(SD卡)兩種存儲方式。3)SharedPreferences共享參數(shù),鍵值對形式存儲。4)網(wǎng)絡(luò)存儲。 5.IntentService與Service有什么區(qū)別? IntentService是Service的子類 1)Service如果要處理異步請求(如耗時操作)的話,需要自己啟動一個worker thread,如果啟動多個worker thread來處理相關(guān)事務(wù)的話,各線程之間無法很好的控制。而IntentService可以將多個異步請求的Intent放入隊列中,封裝了一個開啟worker thread的onHandleIntent()方法,來依次處理放入隊列中的Intent,只有一個worker thread在運(yùn)行,同一時刻只有一個Intent被處理,當(dāng)一個Intent處理完了之后才會處理另外一個Intent。 2)Service可以通過startService()或者bindService()方法來啟動,而IntentService則是通過startService()方法來啟動。3)Service適合多線程處理異步請求。而IntentService則適合處理需要排隊的請求。 6.StartService與bindService之間的區(qū)別? 1)StartService啟動了Service之后無法與Activity之間進(jìn)行通信,與現(xiàn)有的Activity分離,即使Activity被殺掉了之后,Service還可以運(yùn)行,同時通過設(shè)置Service的粘性,還可以讓Service被殺掉之后,可以自啟動。而bindService啟動Service之后,與綁定的Activity之間有關(guān)系,可以依據(jù)Server/Client模式來進(jìn)行通信(binder客戶端主動請求模式,或者通過信使),但是無法設(shè)置Serrvice的粘性。2)StartService啟動的Service,Activity中可以調(diào)用stopService()方法來結(jié)束一個Service,或者通過Service自己調(diào)用stopSelf()方法來結(jié)束Service。而bindService只能通過Activity()來調(diào)用unbindService()方法來結(jié)束Service,Service會調(diào)用onUnBind()方法,以及onDestroy()方法。 7.ArrayAdapter BaseAdapter CursorAdapter的區(qū)別? ArrayAdpter CursorAdapter都是BaseAdapter的子類。都是用來填充那些含有item的控件。 1)主要區(qū)別是數(shù)據(jù)來源不同。ArrayAdapter數(shù)據(jù)來源是Object數(shù)組,CursorAdapter數(shù)據(jù)來源是數(shù)據(jù)庫的Cursor,而BaseAdapter適合創(chuàng)建復(fù)雜自定義的item內(nèi)容,通過繼承BaseAdapter類,重寫相關(guān)方法來實現(xiàn)。 8.Handler與Looper之間的關(guān)系? 1)Handler和Looper的關(guān)系就好比,坐地鐵過安檢時候:每一個人可以理解為一個Handler,一個人的一個或者多個東西看做Message而循環(huán)滾動的檢查臺裝置可以看做是Looper,而要檢查的東西排成隊列可以理解為MessageQueue消息隊列。 2)Looper是Handler和MessageQuene之間的橋梁,Looper將Handler發(fā)送過的消息放入MessageQueue,同時Looper也將MessageQueue中的Message發(fā)送給Handler來處理。 9.res文件夾與assets文件夾有什么區(qū)別? 1)res文件夾中的資源在會在R.java文件中生成ID,代碼中可以直接通過R.id的形式來訪問。而assets文件夾中的資源不會在R.java文件中生成ID,需要通過AssetsManager通過IO流的方式來訪問。 2)res文件夾中的文件會被壓縮,而assets文件中的文件不會被壓縮。 3)Res不能自定義目錄名,不支持多層目錄。而assets支持自定義目錄名,支持多層目錄。 10.廣播接收器有幾種注冊方式,分別是什么? 1)動態(tài)注冊:在代碼中注冊,創(chuàng)建一個IntentFilter(意圖過濾器)對象,設(shè)置想要就收的廣播,在onCreate()方法中通過調(diào)用registerReceiver()方法來注冊廣播接收器,在onDestroy()方法中通過調(diào)用unregisterReceiver()方法來注銷廣播接收器。2)靜態(tài)注冊:在AndroidManifest.xml文件中注冊, android面試題總結(jié)加強(qiáng)版 (三)(轉(zhuǎn)自CSDN)轉(zhuǎn)載地址:http://blog.csdn.net/itachi85/article/details/7426474 自己總結(jié)的最強(qiáng)android應(yīng)用面試題集 26.如果后臺的Activity由于某原因被系統(tǒng)回收了,如何在被系統(tǒng)回收之前保存當(dāng)前狀態(tài)? 當(dāng)你的程序中某一個Activity A 在運(yùn)行時中,主動或被動地運(yùn)行另一個新的Activity B 這個時候A會執(zhí)行 Java代碼 public void onSaveInstanceState(Bundle outState){ super.onSaveInstanceState(outState);outState.putLong(“id”, 1234567890);} B 完成以后又會來找A, 這個時候就有兩種情況,一種是A被回收,一種是沒有被回收,被回 收的A就要重新調(diào)用onCreate()方法,不同于直接啟動的是這回onCreate()里是帶上參數(shù)savedInstanceState,沒被收回的就還是onResume就好了。 savedInstanceState是一個Bundle對象,你基本上可以把他理解為系統(tǒng)幫你維護(hù)的一個Map對象。在onCreate()里你可能會 用到它,如果正常啟動onCreate就不會有它,所以用的時候要判斷一下是否為空。Java代碼 if(savedInstanceState!= null){ long id = savedInstanceState.getLong(“id”);} 就像官方的Notepad教程 里的情況,你正在編輯某一個note,突然被中斷,那么就把這個note的id記住,再起來的時候就可以根據(jù)這個id去把那個note取出來,程序就完整 一些。 比如你的界面就是讀取一個列表,那就不需要特殊記住什么,哦,沒準(zhǔn)你需要記住滾動條的位置...27.如何退出Activity 對于單一Activity的應(yīng)用來說,退出很簡單,直接finish()即可。當(dāng)然,也可以用killProcess()和System.exit()這樣的方法?,F(xiàn)提供幾個方法,供參考: 1、拋異常強(qiáng)制退出:該方法通過拋異常,使程序Force Close。驗證可以,但是,需要解決的問題是,如何使程序結(jié)束掉,而不彈出Force Close的窗口。 2、記錄打開的Activity:每打開一個Activity,就記錄下來。在需要退出時,關(guān)閉每一個Activity即可。 3、發(fā)送特定廣播:在需要結(jié)束應(yīng)用時,發(fā)送一個特定的廣播,每個Activity收到廣播后,關(guān)閉即可。 4、遞歸退出在打開新的Activity時使用startActivityForResult,然后自己加標(biāo)志,在onActivityResult中處理,遞歸關(guān)閉。除了第一個,都是想辦法把每一個Activity都結(jié)束掉,間接達(dá)到目的。但是這樣做同樣不完美。你會發(fā)現(xiàn),如果自己的應(yīng)用程序?qū)γ恳粋€Activity都設(shè)置了nosensor,在兩個Activity結(jié)束的間隙,sensor可能有效了。但至少,我們的目的達(dá)到了,而且沒有影響用戶使用。為了編程方便,最好定義一個Activity基類,處理這些共通問題。 28.請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關(guān)系。 Message Queue(消息隊列):用來存放通過Handler發(fā)布的消息,通常附屬于某一個創(chuàng)建它的線程,可以通過Looper.myQueue()得到當(dāng)前線程的消息隊列 Handler:可以發(fā)布或者處理一個消息或者操作一個Runnable,通過Handler發(fā)布消息,消息將只會發(fā)送到與它關(guān)聯(lián)的消息隊列,然也只能處理該消息隊列中的消息 Looper:是Handler和消息隊列之間通訊橋梁,程序組件首先通過Handler把消息傳遞給Looper,Looper把消息放入隊列。Looper也把消息隊列里的消息廣播給所有的 Handler,Handler接受到消息后調(diào)用handleMessage進(jìn)行處理 Message:消息的類型,在Handler類中的handleMessage方法中得到單個的消息進(jìn)行處理.29.你如何評價Android系統(tǒng)?優(yōu)缺點(diǎn)。 1、學(xué)習(xí)的開源性 2、軟件兼容性比較好 3、軟件發(fā)展迅速 4、界面布局好 缺點(diǎn): 1、版本過多 2、先有軟件少 3、商務(wù)性能差 30.談?wù)刟ndroid數(shù)據(jù)存儲方式。 Android提供了5種方式存儲數(shù)據(jù): (1)使用SharedPreferences存儲數(shù)據(jù);它是Android提供的用來存儲一些簡單配置信息的一種機(jī)制,采用了XML格式將數(shù)據(jù)存儲到設(shè)備中。只能在同一個包內(nèi)使用,不能在不同的包之間使用。 (2)文件存儲數(shù)據(jù);文件存儲方式是一種較常用的方法,在Android中讀取/寫入文件的方法,與Java中實現(xiàn)I/O的程序是完全一樣的,提供了openFileInput()和openFileOutput()方法來讀取設(shè)備上的文件。 (3)SQLite數(shù)據(jù)庫存儲數(shù)據(jù);SQLite是Android所帶的一個標(biāo)準(zhǔn)的數(shù)據(jù)庫,它支持SQL語句,它是一個輕量級的嵌入式數(shù)據(jù)庫。 (4)使用ContentProvider存儲數(shù)據(jù);主要用于應(yīng)用程序之間進(jìn)行數(shù)據(jù)交換,從而能夠讓其他的應(yīng)用保存或讀取此Content Provider的各種數(shù)據(jù)類型。 (5)網(wǎng)絡(luò)存儲數(shù)據(jù);通過網(wǎng)絡(luò)上提供給我們的存儲空間來上傳(存儲)和下載(獲取)我們存儲在網(wǎng)絡(luò)空間中的數(shù)據(jù)信息。 31.Android中Activity, Intent, Content Provider, Service各有什么區(qū)別。 Activity: 活動,是最基本的android應(yīng)用程序組件。一個活動就是一個單獨(dú)的屏幕,每一個活動都被實現(xiàn)為一個獨(dú)立的類,并且從活動基類繼承而來。 Intent: 意圖,描述應(yīng)用想干什么。最重要的部分是動作和動作對應(yīng)的數(shù)據(jù)。 Content Provider:內(nèi)容提供器,android應(yīng)用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件、SQLite數(shù)據(jù)庫中,甚至是任何有效的設(shè)備中。當(dāng)你想將你的應(yīng)用數(shù)據(jù)和其他應(yīng)用共享時,內(nèi)容提供器就可以發(fā)揮作用了。 Service:服務(wù),具有一段較長生命周期且沒有用戶界面的程序。 有什么區(qū)別。 view是最基礎(chǔ)的,必須在UI主線程內(nèi)更新畫面,速度較慢。 SurfaceView 是view的子類,類似使用雙緩機(jī)制,在新的線程中更新畫面所以刷新界面速度比view快 GLSurfaceView 是SurfaceView的子類,opengl 專用的 33.Manifest.xml文件中主要包括哪些信息? manifest:根節(jié)點(diǎn),描述了package中所有的內(nèi)容。 uses-permission:請求你的package正常運(yùn)作所需賦予的安全許可。 permission: 聲明了安全許可來限制哪些程序能你package中的組件和功能。instrumentation:聲明了用來測試此package或其他package指令組件的代碼。application:包含package中application級別組件聲明的根節(jié)點(diǎn)。activity:Activity是用來與用戶交互的主要工具。 receiver:IntentReceiver能使的application獲得數(shù)據(jù)的改變或者發(fā)生的操作,即使它當(dāng)前不在運(yùn)行。 service:Service是能在后臺運(yùn)行任意時間的組件。 provider:ContentProvider是用來管理持久化數(shù)據(jù)并發(fā)布給其他應(yīng)用程序使用的組件。 34.根據(jù)自己的理解描述下Android數(shù)字簽名。 (1)所有的應(yīng)用程序都必須有數(shù)字證書,Android系統(tǒng)不會安裝一個沒有數(shù)字證書的應(yīng)用程序(2)Android程序包使用的數(shù)字證書可以是自簽名的,不需要一個權(quán)威的數(shù)字證書機(jī)構(gòu)簽名認(rèn)證 (3)如果要正式發(fā)布一個Android,必須使用一個合適的私鑰生成的數(shù)字證書來給程序簽名,而不能使用adt插件或者ant工具生成的調(diào)試證書來發(fā)布。 (4)數(shù)字證書都是有有效期的,Android只是在應(yīng)用程序安裝的時候才會檢查證書的有效期。如果程序已經(jīng)安裝在系統(tǒng)中,即使證書過期也不會影響程序的正常功能。 35.AIDL的全稱是什么?如何工作?能處理哪些類型的數(shù)據(jù)? AIDL全稱Android Interface Definition Language(AndRoid接口描述語言)是一種借口描述語言;編譯器可以通過aidl文件生成一段代碼,通過預(yù)先定義的接口達(dá)到兩個進(jìn)程內(nèi)部通信進(jìn)程跨界對象訪問的目的.AIDL的IPC的機(jī)制和COM或CORBA類似, 是基于接口的,但它是輕 .如果要使用AIDL, 需要完成2件事情: 1.引入AIDL的相關(guān)類.;2.調(diào)用aidl產(chǎn)生的class.理論上, 參數(shù)可以傳遞基本數(shù)據(jù)類型和String, 還有就是Bundle的派生類, 不過在Eclipse中,目前的ADT不支持Bundle做為參數(shù), 具體實現(xiàn)步驟如下: 1、創(chuàng)建AIDL文件, 在這個文件里面定義接口, 該接口定義了可供客戶端訪問的方法和屬性。 2、編譯AIDL文件, 用Ant的話, 可能需要手動, 使用Eclipse plugin的話,可以根據(jù)adil文件自動生產(chǎn)java文件并編譯, 不需要人為介入.3、在Java文件中, 實現(xiàn)AIDL中定義的接口.編譯器會根據(jù)AIDL接口, 產(chǎn)生一個JAVA接口。這個接口有一個名為Stub的內(nèi)部抽象類,它繼承擴(kuò)展了接口并實現(xiàn)了遠(yuǎn)程調(diào)用需要的幾個方法。接下來就需要自己去實現(xiàn)自定義的幾個接口了.4、向客戶端提供接口ITaskBinder, 如果寫的是service,擴(kuò)展該Service并重載onBind()方法來返回一個實現(xiàn)上述接口的類的實例。 5、在服務(wù)器端回調(diào)客戶端的函數(shù).前提是當(dāng)客戶端獲取的IBinder接口的時候,要去注冊回調(diào)函數(shù), 只有這樣, 服務(wù)器端才知道該調(diào)用那些函數(shù) AIDL語法很簡單,可以用來聲明一個帶一個或多個方法的接口,也可以傳遞參數(shù)和返回值。由于遠(yuǎn)程調(diào)用的需要, 這些參數(shù)和返回值并不是任何類型.下面是些AIDL支持的數(shù)據(jù)類型: 1.不需要import聲明的簡單Java編程語言類型(int,boolean等)2.String, CharSequence不需要特殊聲明 3.List, Map和Parcelables類型, 這些類型內(nèi)所包含的數(shù)據(jù)成員也只能是簡單數(shù)據(jù)類型, String等其他比支持的類型.(另外: 我沒嘗試Parcelables, 在Eclipse+ADT下編譯不過, 或許以后會有所支持).實現(xiàn)接口時有幾個原則: .拋出的異常不要返回給調(diào)用者.跨進(jìn)程拋異常處理是不可取的..IPC調(diào)用是同步的。如果你知道一個IPC服務(wù)需要超過幾毫秒的時間才能完成地話,你應(yīng)該避免在Activity的主線程中調(diào)用。也就是IPC調(diào)用會掛起應(yīng)用程序?qū)е陆缑媸ロ憫?yīng).這種情況應(yīng)該考慮單起一個線程來處理..不能在AIDL接口中聲明靜態(tài)屬性。IPC的調(diào)用步驟: 1.聲明一個接口類型的變量,該接口類型在.aidl文件中定義。2.實現(xiàn)ServiceConnection。 3.調(diào)用ApplicationContext.bindService(),并在ServiceConnection實現(xiàn)中進(jìn)行傳遞.4.在ServiceConnection.onServiceConnected()實現(xiàn)中,你會接收一個IBinder實例(被調(diào)用的Service).調(diào)用 YourInterfaceName.Stub.asInterface((IBinder)service)將參數(shù)轉(zhuǎn)換為YourInterface類型。5.調(diào)用接口中定義的方法。你總要檢測到DeadObjectException異常,該異常在連接斷開時被拋出。它只會被遠(yuǎn)程方法拋出。 6.斷開連接,調(diào)用接口實例中的ApplicationContext.unbindService()參考:http://buaadallas.blog.51cto.com/399160/372090 36.android:gravity與android:layout_gravity的區(qū)別 LinearLayout有兩個非常相似的屬性:android:gravity與android:layout_gravity。他們的區(qū)別在 于:android:gravity用于設(shè)置View組件的對齊方式,而android:layout_gravity用于設(shè)置Container組件的 對齊方式。 舉個例子,我們可以通過設(shè)置android:gravity=“center”來讓EditText中的文字在EditText組件中居中顯示;同 時我們設(shè)置EditText的android:layout_gravity=“right”來讓EditText組件在LinearLayout中居中 顯示。來實踐以下: 正如我們所看到的,在EditText中,其中的文字已經(jīng)居中顯示了,而EditText組件自己也對齊到了LinearLayout的右側(cè)。 [html] view plaincopyprint? 1. 2.xmlns:android=“http://schemas.android.com/apk/res/android” 3.android:orientation=“vertical” 4.android:layout_width=“fill_parent” 5.android:layout_height=“fill_parent”> 6. 7.android:layout_width=“wrap_content” 8.android:gravity=“center” 9.android:layout_height=“wrap_content” 10.android:text=“one” 11.android:layout_gravity=“right”/> 12. 這兩個屬性也可以用于 Framlayout Textview 等等,表示的意思大同小異 37.padding與margin的區(qū)別 padding填充的意思,指的是view中的content與view邊緣的距離,類似文本中的indent 而margin表示的是view的左邊緣與parent view的左邊緣的距離 margin一般用來描述控件間位置關(guān)系,而padding一般描述控件內(nèi)容和控件的位置關(guān)系。簡單,padding是站在父 view的角度描述問題,它規(guī)定它里面的內(nèi)容必須與這個父view邊界的距離。margin則是站在自己的角度描述問題,規(guī)定自己和其他(上下左右)的 view之間的距離,如果同一級只有一個view,那么它的效果基本上就和padding一樣了。例如我的XML layout代碼如下: view plaincopy to clipboardprint? [html] view plaincopyprint? 1. 2. 3.android:orientation=“vertical” 4.android:layout_width=“fill_parent” 5.android:layout_height=“fill_parent” 6.android:paddingLeft=“10dip” 7.android:paddingRight=“10dip” 8.android:paddingTop=“10dip” 9.android:paddingBottom=“10dip” 10.> 11. 12.android:layout_width=“wrap_content” 13.android:layout_height=“wrap_content” 14.android:background=“#FF0000” 15.android:text=“@string/hello” 16.android:paddingLeft=“50dip” 17.android:paddingRight=“50dip” 18.android:paddingTop=“50dip” 19.android:paddingBottom=“50dip” 20.android:layout_marginBottom=“10dip” 21./> 22. 23.android:layout_width=“wrap_content” 24.android:layout_height=“wrap_content” 25.android:background=“#FF0000” 26.android:text=“@string/hello” 27.android:paddingLeft=“50dip” 28.android:paddingRight=“50dip” 29.android:paddingTop=“50dip” 30.android:paddingBottom=“50dip” 31.android:layout_marginBottom=“10dip” 32./> 33. 34.android:layout_width=“wrap_content” 35.android:layout_height=“wrap_content” 36.android:background=“#FF0000” 37.android:text=“@string/hello” 38.android:paddingLeft=“50dip” 39.android:paddingRight=“50dip” 40.android:paddingTop=“50dip” 41.android:paddingBottom=“50dip” 42.android:layout_marginBottom=“10dip” 43./> 44. 45.android:layout_width=“wrap_content” 46.android:layout_height=“wrap_content” 47.android:background=“#FF0000” 48.android:text=“@string/hello” 49.android:paddingLeft=“50dip” 50.android:paddingRight=“50dip” 51.android:paddingTop=“50dip” 52.android:paddingBottom=“50dip” 53.android:layout_marginBottom=“10dip” 54./> 55. 那么我會得到如下的效果,圖上已經(jīng)很明確的標(biāo)出來區(qū)別咯。 38.注冊廣播接收者兩種方式的區(qū)別 現(xiàn)在我們就來實現(xiàn)一個簡單的廣播程序。Android提供了兩種注冊廣播接受者的形式,分別是在程序中動態(tài)注冊和在xml中指定。他們之間的區(qū)別就是作用 的范圍不同,程序動態(tài)注冊的接收者只在程序運(yùn)行過程中有效,而在xml注冊的接收者不管你的程序有沒有啟動有會起作用。 39.Dalvik基于JVM的改進(jìn) 1.幾個class變?yōu)橐粋€dex,constant pool,省內(nèi)存 2.Zygote,copy-on-write shared,省內(nèi)存,省cpu,省電 3.基于寄存器的bytecode,省指令,省cpu,省電 4.Trace-based JIT,省cpu,省電,省內(nèi)存 40.android中有哪幾種解析xml的類,官方推薦哪種?以及它們的原理和區(qū)別.? DOM解析 優(yōu)點(diǎn): 1.XML樹在內(nèi)存中完整存儲,因此可以直接修改其數(shù)據(jù)和結(jié)構(gòu).2.可以通過該解析器隨時訪問XML樹中的任何一個節(jié)點(diǎn).3.DOM解析器的API在使用上也相對比較簡單.缺點(diǎn):如果XML文檔體積比較大時,將文檔讀入內(nèi)存是非常消耗系統(tǒng)資源的.使用場景:DOM 是用與平臺和語言無關(guān)的方式表示 XML 文檔的官方 W3C 標(biāo)準(zhǔn).DOM 是以層次結(jié)構(gòu)組織的節(jié)點(diǎn)的集合.這個層次結(jié)構(gòu)允許開發(fā)人員在樹中尋找特定信息.分析該結(jié)構(gòu),然后才能進(jìn)行任何工作.DOM是基于對象層次結(jié)構(gòu)的.? SAX解析 優(yōu)點(diǎn): SAX 對內(nèi)存的要求比較低,因為它讓開發(fā)人員自己來決定所要處理的標(biāo)簽.特別是當(dāng)開發(fā)人員只需要處理文檔中所包含的部分?jǐn)?shù)據(jù)時,SAX 這種擴(kuò)展能力得到了更好的體現(xiàn).缺點(diǎn): 用SAX方式進(jìn)行XML解析時,需要順序執(zhí)行,所以很難訪問到同一文檔中的不同數(shù)據(jù).此外,在基于該方式的解析編碼過程也相對復(fù)雜.使用場景: 對于含有數(shù)據(jù)量十分巨大,而又不用對文檔的所有數(shù)據(jù)進(jìn)行遍歷或者分析的時候,使用該方法十分有效.該方法不用將整個文檔讀入內(nèi)存,而只需讀取到程序所需的文檔標(biāo)簽處即可.? Xmlpull解析 android SDK提供了xmlpull api,xmlpull和sax類似,是基于流(stream)操作文件,然后根據(jù)節(jié)點(diǎn)事件回調(diào)開發(fā)者編寫的處理程序.因為是基于流的處理,因此xmlpull和sax都比較節(jié)約內(nèi)存資源,不會象dom那樣要把所有節(jié)點(diǎn)以對橡樹的形式展現(xiàn)在內(nèi)存中.xmlpull比sax更簡明,而且不需要掃描完整個流.41.Android系統(tǒng)中GC什么情況下會出現(xiàn)內(nèi)存泄露呢? 出現(xiàn)情況: 1.數(shù)據(jù)庫的cursor沒有關(guān)閉 2.構(gòu)造adapter時,沒有使用緩存contentview 衍生listview的優(yōu)化問題-----減少創(chuàng)建view的對象,充分使用contentview,可以使用一靜態(tài)類來優(yōu)化處理getview的過程/ 3.Bitmap對象不使用時采用recycle()釋放內(nèi)存 4.activity中的對象的生命周期大于activity 調(diào)試方法: DDMS==> HEAPSZIE==>dataobject==>[Total Size] 談?wù)剬ndroid NDK的理解 NDK 全稱: Native Development Kit 2.誤解 誤解一: NDK 發(fā)布之前, Android 不支持進(jìn)行 C 開發(fā) 在Google 中搜索 “NDK” ,很多 “Android 終于可以使用 C++ 開發(fā) ” 之類的標(biāo)題,這是一種對 Android平臺編程方式的誤解.其實, Android平臺從誕生起,就已經(jīng)支持 C.C++ 開發(fā).眾所周知, Android 的 SDK 基于 Java 實現(xiàn),這意味著基于 Android SDK 進(jìn)行開發(fā)的第三方應(yīng)用都必須使用 Java 語言.但這并不等同于 “ 第三方應(yīng)用只能使用 Java”.在 Android SDK 首次發(fā)布時, Google 就宣稱其虛擬機(jī) Dalvik 支持 JNI 編程方式,也就是第三方應(yīng)用完全可以通過 JNI 調(diào)用自己的 C 動態(tài)庫,即在 Android平臺上, “Java+C” 的編程方式是一直都可以實現(xiàn)的.當(dāng)然這種誤解的產(chǎn)生是有根源的:在Android SDK 文檔里,找不到任何 JNI 方面的幫助.即使第三方應(yīng)用開發(fā)者使用 JNI 完成了自己的 C 動態(tài)鏈接庫(so)開發(fā),但是 so 如何和應(yīng)用程序一起打包成 apk 并發(fā)布?這里面也存在技術(shù)障礙.我曾經(jīng)花了不少時間,安裝交叉編譯器創(chuàng)建 so ,并通過 asset(資源)方式,實現(xiàn)捆綁 so 發(fā)布.但這種方式只能屬于取巧的方式,并非官方支持.所以,在 NDK 出來之前,我們將 “Java+C” 的開發(fā)模式稱之為灰色模式,即官方既不聲明 “ 支持這種方式 ” ,也不聲明 “ 不支持這種方式 ”.誤解二:有了 NDK ,我們可以使用純 C 開發(fā) Android 應(yīng)用 Android SDK采用 Java 語言發(fā)布,把眾多的 C 開發(fā)人員排除在第三方應(yīng)用開發(fā)外(注意:我們所有討論都是基于“ 第三方應(yīng)用開發(fā) ” , Android 系統(tǒng)基于 Linux ,系統(tǒng)級別的開發(fā)肯定是支持 C 語言的.).NDK 的發(fā)布,許多人會誤以為,類似于 Symbian.WM ,在 Android平臺上終于可以使用純 C.C++ 開發(fā)第三方應(yīng)用了!其實不然, NDK 文檔明確說明: it is not a good way.因為 NDK 并沒有提供各種系統(tǒng)事件處理支持,也沒有提供應(yīng)用程序生命周期維護(hù).此外,在本次發(fā)布的 NDK 中,應(yīng)用程序 UI 方面的 API 也沒有提供.至少目前來說,使用純 C.C++ 開發(fā)一個完整應(yīng)用的條件還不完備.1.NDK 是一系列工具的集合.NDK提供了一系列的工具,幫助開發(fā)者快速開發(fā) C(或 C++)的動態(tài)庫,并能自動將 so 和 java 應(yīng)用一起打包成 apk.這些工具對開發(fā)者的幫助是巨大的.NDK集成了交叉編譯器,并提供了相應(yīng)的 mk 文件隔離 CPU.平臺.ABI 等差異,開發(fā)人員只需要簡單修改 mk 文件(指出 “ 哪些文件需要編譯 ”.“ 編譯特性要求 ” 等),就可以創(chuàng)建 出 NDK可以自動地將 so 和 Java 應(yīng)用一起打包,極大地減輕了開發(fā)人員的打包工作.2.NDK 提供了一份穩(wěn)定.功能有限的 API 頭文件聲明.Google明確聲明該 API 是穩(wěn)定的,在后續(xù)所有版本中都穩(wěn)定支持當(dāng)前發(fā)布的 API.從該版本的 NDK 中看出,這些 API 支持的功能非常有限,包含有: C 標(biāo)準(zhǔn)庫(libc).標(biāo)準(zhǔn)數(shù)學(xué)庫(libm).壓縮庫(libz).Log 庫(liblog).3.NDK 帶來什么 1.NDK 的發(fā)布,使 “Java+C” 的開發(fā)方式終于轉(zhuǎn)正,成為官方支持的開發(fā)方式.使用NDK ,我們可以將要求高性能的應(yīng)用邏輯使用 C 開發(fā),從而提高應(yīng)用程序的執(zhí)行效率.使用NDK ,我們可以將需要保密的應(yīng)用邏輯使用 C 開發(fā).畢竟, Java 包都是可以反編譯的.NDK促使專業(yè) so 組件商的出現(xiàn).(樂觀猜想,要視乎 Android 用戶的數(shù)量) 2.NDK 將是 Android平臺支持 C 開發(fā)的開端.NDK提供了的開發(fā)工具集合,使開發(fā)人員可以便捷地開發(fā).發(fā)布 C 組件.同時, Google承諾在 NDK 后續(xù)版本中提高 “ 可調(diào)式 ” 能力,即提供遠(yuǎn)程的 gdb 工具,使我們可以便捷地調(diào)試 C 源碼.在支持 Android平臺 C 開發(fā),我們能感覺到 Google 花費(fèi)了很大精力,我們有理由憧憬 “C 組件支持 ” 只是 Google Android平臺上C 開發(fā)的開端.畢竟, C 程序員仍然是碼農(nóng)陣營中的絕對主力,將這部分人排除在 Android 應(yīng)用開發(fā)之外,顯然是不利于 Android平臺繁榮昌盛的. Android 面試題(有詳細(xì)答案) 附帶答案,共100分 一、選擇題(30題,每題1.5分,共45分) 1.java.io包中定義了多個流類型來實現(xiàn)輸入和輸出功能,可以從不同的角度對其進(jìn)行分類,按功能分為:(c),如果為讀取的內(nèi)容進(jìn)行處理后再輸出,需要使用下列哪種流?() A、輸入流和輸出流B、字節(jié)流和字符流C、節(jié)點(diǎn)流和處理流 D、File streamE、Pipe streamF、Random streamG、Filter stream 2.下列代碼的執(zhí)行結(jié)果是:() public class Test3{ public static void main(String args[]){ System.out.print(100%3); System.out.print(“,”); System.out.println(100%3.0); } } A、1,1 B、1,1.0 C、1.0,1 D、1.0,1.0 3.在繼承中,關(guān)于構(gòu)造方法的說明,下列說法錯誤的是() A、子類無條件的繼承父類的無參構(gòu)造方法,B、子類可以引用父類中的有參構(gòu)造方法,使用super關(guān)鍵字,C、如果子類沒有構(gòu)造方法,則父類無參構(gòu)造方法作為自已的構(gòu)造方法,D、如果子類有無參構(gòu)造方法,而父類的無參構(gòu)造方法則被覆蓋。 4.以下程序的運(yùn)行結(jié)果為() public class IfTest{ public static void main(String args[]){ int x=3; int y=1; if(x==y) System.out.println(“Not equal”); else System.out.println(“Equal”); } } A、Not equalB、EqualC、無輸出D、編譯出錯 5.Java語言中字符串“學(xué)Java”所占的內(nèi)存空間是() A.6個字節(jié) B.7個字節(jié) C.10個字節(jié) D.11個字節(jié) 6.關(guān)于下列程序段的輸出結(jié)果,說法正確的是:() public class MyClass{ static int i; public static void main(String argv[]){ System.out.println(i); } } A、有錯誤,變量i沒有初始化。 B、null C、1 D、0 7.下列哪些語句關(guān)于內(nèi)存回收的說明是正確的?() A、程序員必須創(chuàng)建一個線程來釋放內(nèi)存 B、內(nèi)存回收程序負(fù)責(zé)釋放無用內(nèi)存 C、內(nèi)存回收程序允許程序員直接釋放內(nèi)存 D、內(nèi)存回收程序可以在指定的時間釋放內(nèi)存對象 8.下面異常是屬于Runtime Exception 的是()(多選) A、ArithmeticException B、IllegalArgumentException C、NullPointerException D、BufferUnderflowException 9.Math.round(11.5)等于多少().Math.round(-11.5)等于多少().A、11 ,-11B、11 ,-12C、12 ,-11D、12 ,-12 10.下列程序段的輸出結(jié)果是:() void complicatedexpression_r(){ int x=20, y=30; boolean b; b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60; System.out.println(b); } A、trueB、falseC、1D、0 11.activity對一些資源以及狀態(tài)的操作保存,最好是保存在生命周期的哪個函數(shù)中進(jìn)行 () A、onPause()B、onCreate()C、onResume()D、onStart() 12.Intent傳遞數(shù)據(jù)時,下列的數(shù)據(jù)類型哪些可以被傳遞()(多選) A、SerializableB、charsequenceC、ParcelableD、Bundle 13.android 中下列屬于Intent的作用的是() A、實現(xiàn)應(yīng)用程序間的數(shù)據(jù)共享 B、是一段長的生命周期,沒有用戶界面的程序,可以保持應(yīng)用在后臺運(yùn)行,而不會 因為切換頁面而消失 C、可以實現(xiàn)界面間的切換,可以包含動作和動作數(shù)據(jù),連接四大組件的紐帶 D、處理一個應(yīng)用程序整體性的工作 14.下列屬于SAX解析xml文件的優(yōu)點(diǎn)的是() A、將整個文檔樹在內(nèi)存中,便于操作,支持刪除,修改,重新排列等多種功能 B、不用事先調(diào)入整個文檔,占用資源少 C、整個文檔調(diào)入內(nèi)存,浪費(fèi)時間和空間 D、不是長久駐留在內(nèi)存,數(shù)據(jù)不是持久的,事件過后,若沒有保存數(shù)據(jù),數(shù)據(jù)就會 消失 15.下面的對自定style的方式正確的是() A、 B、 C、 D、 16.在android中使用Menu時可能需要重寫的方法有()。(多選) A、onCreateOptionsMenu() B、onCreateMenu() C、onOptionsItemSelected() D、onItemSelected() 17.在SQL Server Management Studio 中運(yùn)行下列T-SQL語句,其輸出值()。 SELECT @@IDENTITY A、可能為0.1 B、可能為3 C、不可能為-100 D、肯定為0 18.在SQL Server 2005中運(yùn)行如下T-SQL語句,假定SALES表中有多行數(shù)據(jù),執(zhí)行查詢之后的結(jié)果是()。 BEGIN TRANSACTION A Update SALES Set qty=30 WHERE qty<30 BEGIN TRANSACTION B Update SALES Set qty=40 WHERE qty<40 Update SALES Set qty=50 WHERE qty<50 Update SALES Set qty=60 WHERE qty<60 COMMIT TRANSACTION B COMMIT TRANSACTION A A、SALES表中qty列最小值大于等于30 B、SALES表中qty列最小值大于等于40 C、SALES表中qty列的數(shù)據(jù)全部為50 D、SALES表中qty列最小值大于等于60 19.在android中使用SQLiteOpenHelper這個輔助類時,可以生成一個數(shù)據(jù)庫,并可以對數(shù) 據(jù)庫版本進(jìn)行管理的方法可以是() A、getWriteableDatabase() B、getReadableDatabase() C、getDatabase() D、getAbleDatabase() 20.android 關(guān)于service生命周期的onCreate()和onStart()說法正確的是()(多選題) A、當(dāng)?shù)谝淮螁拥臅r候先后調(diào)用onCreate()和onStart()方法 B、當(dāng)?shù)谝淮螁拥臅r候只會調(diào)用onCreate()方法 C、如果service已經(jīng)啟動,將先后調(diào)用onCreate()和onStart()方法 D、如果service已經(jīng)啟動,只會執(zhí)行onStart()方法,不在執(zhí)行onCreate()方法 21.下面是屬于GLSurFaceView特性的是()(多選) A、管理一個surface,這個surface就是一塊特殊的內(nèi)存,能直接排版到android的視圖view上。 B、管理一個EGL display,它能讓opengl把內(nèi)容渲染到上述的surface上。 C、讓渲染器在獨(dú)立的線程里運(yùn)作,和UI線程分離。 D、可以直接從內(nèi)存或者DMA等硬件接口取得圖像數(shù)據(jù) 22.下面在AndroidManifest.xml文件中注冊BroadcastReceiver方式正確的是() A、 android:name=“android.provider.action.NewBroad”/> B、 android:name=“android.provider.action.NewBroad”/> C、 android:name=“android.provider.action.NewBroad”/> D、 android:name=“android.provider.action.NewBroad”/> 23.關(guān)于ContenValues類說法正確的是() A、他和Hashtable比較類似,也是負(fù)責(zé)存儲一些名值對,但是他存儲的名值對當(dāng)中的名是String類型,而值都是基本類型 B、他和Hashtable比較類似,也是負(fù)責(zé)存儲一些名值對,但是他存儲的名值對當(dāng)中的名是任意類型,而值都是基本類型 C、他和Hashtable比較類似,也是負(fù)責(zé)存儲一些名值對,但是他存儲的名值對當(dāng)中的名,可以為空,而值都是String類型 D、他和Hashtable比較類似,也是負(fù)責(zé)存儲一些名值對,但是他存儲的名值對當(dāng)中的名是String類型,而值也是String類型 24.我們都知道Hanlder是線程與Activity通信的橋梁,如果線程處理不當(dāng),你的機(jī)器就會變得越慢,那么線程銷毀的方法是() A、onDestroy() B、onClear() C、onFinish() D、onStop() 25.下面退出Activity錯誤的方法是() A、finish() B、拋異常強(qiáng)制退出 C、System.exit() D、onStop() 26.下面屬于android的動畫分類的有()(多項) A、TweenB、Frame C、Draw D、Animation 27.下面關(guān)于Android dvm的進(jìn)程和Linux的進(jìn)程,應(yīng)用程序的進(jìn)程說法正確的是() A、DVM指dalivk的虛擬機(jī).每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,不一定擁有一個獨(dú)立的Dalvik虛擬機(jī)實例.而每一個DVM都是在Linux 中的一個進(jìn)程,所以說可以認(rèn)為是同一個概念.B、DVM指dalivk的虛擬機(jī).每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,不一定擁有一個獨(dú)立的Dalvik虛擬機(jī)實例.而每一個DVM不一定都是在Linux 中的一個進(jìn)程,所以說不是一個概念.C、DVM指dalivk的虛擬機(jī).每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個獨(dú)立的Dalvik虛擬機(jī)實例.而每一個DVM不一定都是在Linux 中的一個進(jìn)程,所以說不是一個概念.D、DVM指dalivk的虛擬機(jī).每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個獨(dú)立的Dalvik虛擬機(jī)實例.而每一個DVM都是在Linux 中的一個進(jìn)程,所以說可以認(rèn)為是同一個概念.28.Android項目工程下面的assets目錄的作用是什么 A、放置應(yīng)用到的圖片資源。 B、主要放置多媒體等數(shù)據(jù)文件 C、放置字符串,顏色,數(shù)組等常量數(shù)據(jù) D、放置一些與UI相應(yīng)的布局文件,都是xml文件 29..關(guān)于res/raw目錄說法正確的是() A、這里的文件是原封不動的存儲到設(shè)備上不會轉(zhuǎn)換為二進(jìn)制的格式 B、這里的文件是原封不動的存儲到設(shè)備上會轉(zhuǎn)換為二進(jìn)制的格式 C、這里的文件最終以二進(jìn)制的格式存儲到指定的包中 D、這里的文件最終不會以二進(jìn)制的格式存儲到指定的包中 30.下列對android NDK的理解正確的是() A、NDK是一系列工具的集合B、NDK 提供了一份穩(wěn)定、功能有限的 API 頭文件聲明。 C、使 “Java+C” 的開發(fā)方式終于轉(zhuǎn)正,成為官方支持的開發(fā)方式 D、NDK 將是 Android平臺支持 C 開發(fā)的開端 二.填空題(每題2分,共20分) 1.我們用___ ____來定義一個整數(shù),用___ ____來定義一個字符類型,稱為原始數(shù)據(jù)類型。 2.android中常用的四個布局是?s 3.android 的四大組件是? 4.java.io包中的__________和______________類主要用于對對象(Object)的讀寫。 5.android 中service的實現(xiàn)方法是:_______-和___________-。 6.activity一般會重載7個方法用來維護(hù)其生命周期,除了onCreate(),onStart(),onDestory()外還有_______-,_________ ,_________ ,_____________。 7.android的數(shù)據(jù)存儲的方式____________,___________,________ ,_______-,________。 8.當(dāng)啟動一個Activity并且新的Activity執(zhí)行完后需要返回到啟動它的Activity來執(zhí)行的回調(diào)函數(shù)是_____________()。 9.請使用命令行的方式創(chuàng)建一個名字為myAvd,sdk版本為2.2,sd卡是在d盤的根目錄下,名字為scard.img,并指定屏幕大小HVGA.____________________________________。 10.程序運(yùn)行的結(jié)果是:_______________。 public class Example{ String str=new String(“good”); char[]ch={'a','b','c'}; public static void main(String args[]){ Example ex=new Example(); ex.change(ex.str,ex.ch); System.out.print(ex.str+“ and ”); Sytem.out.print(ex.ch); } public void change(String str,char ch[]){ str=“test ok”; ch[0]='g'; } } 三 簡答編程題(共35分) 1簡述Android應(yīng)用程序結(jié)構(gòu)是哪些?(7分) Android應(yīng)用程序結(jié)構(gòu)是:請繼承SQLiteOpenHelper實現(xiàn):(10分) 1).創(chuàng)建一個版本為1的“diaryOpenHelper.db”的數(shù)據(jù)庫,2).同時創(chuàng)建一個 “diary” 表(包含一個_id主鍵并自增長,topic字符型100長度,content字符型1000長度) 3).在數(shù)據(jù)庫版本變化時請刪除diary表,并重新創(chuàng)建出diary表。 3.頁面上現(xiàn)有ProgressBar控件progressBar,請用書寫線程以10秒的的時間完成其進(jìn)度顯示工作。(10分)第三篇:Android面試題總結(jié)
第四篇:Android面試題總結(jié)強(qiáng)勁版(三)
第五篇:Android面試題(十一)