Android開發面試題

學識都 人氣:3.2W

Android開發面試題

Android開發面試題

1. 下列哪些語句關於記憶體回收的說明是正確的? (b ) A、 程式設計師必須建立一

個執行緒來釋放記憶體

B、 記憶體回收程式負責釋放無用記憶體

C、 記憶體回收程式允許程式設計師直接釋放記憶體

D、 記憶體回收程式可以在指定的時間釋放記憶體物件

2. 下面異常是屬於Runtime Exception 的是(abcd)(多選) A、ArithmeticException

B、IllegalArgumentException

C、NullPointerException

D、BufferUnderflowException

3. Math.round(11.5)等於多少(). Math.round(-11.5)等於多少(c). c A、11 ,-11 B、11

,-12 C、12 ,-11 D、12 ,-12

4. 下列程式段的輸出結果是:(b )

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.activity5. 對一些資源以及狀態的操作儲存,最好是保

存在生命週期的哪個函式中進行(d) A、onPause() B、onCreate() C、 onResume()

D、onStart()

6. Intent傳遞資料時,下列的資料型別哪些可以被傳遞(abcd)(多選)

A、Serializable B、charsequence C、Parcelable D、Bundle

7. android 中下列屬於Intent的作用的是(c) A、實現應用程式間的資料共享

B、是一段長的生命週期,沒有使用者介面的程式,可以保持應用在後臺執行,而不會因為切換頁

面而消失

C、可以實現介面間的切換,可以包含動作和動作資料,連線四大元件的紐帶

D、處理一個應用程式整體性的工作

8. 下列屬於SAX解析xml檔案的優點的是(b) A、將整個文件樹在記憶體中,便於操作,支

持刪除,修改,重新排列等多種功能

B、不用事先調入整個文件,佔用資源少

C、整個文件調入記憶體,浪費時間和空間

D、不是長久駐留在記憶體,資料不是持久的,事件過後,若沒有儲存資料,資料就會

消失

9. 下面的對自定style的方式正確的是(a) A、

B、

C、

fill_parent

D、

fill_parent

10. 在android中使用Menu時可能需要重寫的方法有(ac)。(多選)

A、onCreateOptionsMenu()

B、onCreateMenu()

C、onOptionsItemSelected()

D、onItemSelected()

11. 在SQL Server Management Studio 中執行下列T-SQL語句,其輸出值(c)。 SELECT

@@IDENTITY

A、 可能為0.1

B、 可能為3

C、 不可能為-100

D、 肯定為0

12. 在SQL Server 2005中執行如下T-SQL語句,假定SALES表中有多行資料,執行查詢之

後的結果是(d)。 BEGIN TRANSACTION A

Update SALES Set qty=30 WHERE qty<30

BEGIN TRANSACTION B

Update SALES Set qty=40 WHEREqty<40

Update SALES Set qty=50 WHEREqty<50

Update SALES Set qty=60 WHEREqty<60

COMMIT TRANSACTION B

COMMIT TRANSACTION A

A、SALES表中qty列最小值大於等於30

B、SALES表中qty列最小值大於等於40

C、SALES表中qty列的資料全部為50

D、SALES表中qty列最小值大於等於60

13. 在android中使用SQLiteOpenHelper這個輔助類時,可以生成一個數據庫,並可以對資料

庫版本進行管理的方法可以是(ab) A、getWriteableDatabase()

B、getReadableDatabase()

C、getDatabase()

D、getAbleDatabase()

14. android 關於service生命週期的onCreate()和onStart()說法正確的是(ad)(多選題) A、當

第一次啟動的時候先後呼叫onCreate()和onStart()方法

B、當第一次啟動的時候只會呼叫onCreate()方法

C、如果service已經啟動,將先後呼叫onCreate()和onStart()方法

D、如果service已經啟動,只會執行onStart()方法,不在執行onCreate()方法

15. 下面是屬於GLSurFaceView特性的是(abc)(多選) A、管理一個surface,這個surface就是一

塊特殊的記憶體,能直接排版到android的檢視

view上。

B、管理一個EGL display,它能讓opengl把內容渲染到上述的surface上。

C、讓渲染器在獨立的執行緒裡運作,和UI執行緒分離。

D、可以直接從記憶體或者DMA等硬體介面取得影象資料

16. 下面在AndroidManifest.xml檔案中註冊BroadcastReceiver方式正確的(a) A、

android:name="NewBroad">

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"/>

17. 關於ContenValues類說法正確的是(a) A、他和Hashtable比較類似,也是負責儲存一些

名值對,但是他儲存的名值對當中的

名是String型別,而值都是基本型別

B、他和Hashtable比較類似,也是負責儲存一些名值對,但是他儲存的名值對當中的

名是任意型別,而值都是基本型別

C、他和Hashtable比較類似,也是負責儲存一些名值對,但是他儲存的名值對當中的

名,可以為空,而值都是String型別

D、他和Hashtable比較類似,也是負責儲存一些名值對,但是他儲存的名值對當中

的名是String型別,而值也是String型別

18. 我們都知道Hanlder是執行緒與Activity通訊的橋樑,如果執行緒處理不當,你的機器就會變得越

慢,那麼執行緒銷燬的方法是(a) A、onDestroy()

B、onClear()

C、onFinish()

D、onStop()

19. 下面退出Activity錯誤的方法是(c) A、finish()

B、拋異常強制退出

C、System.exit()

D、onStop()

20. 下面屬於android的動畫分類的有(ab)(多項) A、Tween B、Frame C、Draw

D、Animation

21. 下面關於Android dvm的程序和Linux的程序,應用程式的程序說法正確的是(d)

A、DVM指dalivk的虛擬機器.每一個Android應用程式都在它自己的程序中執行,不一定擁有一個獨

立 的Dalvik虛擬機器例項.而每一個DVM都是在Linux中的一個程序,所以說可以認為是同一個概念.

3

立 的Dalvik虛擬機器例項.而每一個DVM都是在Linux中的一個程序,所以說可以認為是同一個概念.

B、DVM指dalivk的虛擬機器.每一個Android應用程式都在它自己的程序中執行,不一定擁有一

個獨立的Dalvik虛擬機器例項.而每一個DVM不一定都是在Linux 中的一個程序,所以說不是一個概念.

C、DVM指dalivk的虛擬機器.每一個Android應用程式都在它自己的程序中執行,都擁有一個獨

立的Dalvik虛擬機器例項.而每一個DVM不一定都是在Linux 中的一個程序,所以說不是一個概念.

D、DVM指dalivk的虛擬機器.每一個Android應用程式都在它自己的程序中執行,都擁有一個獨

立的 Dalvik虛擬機器例項.而每一個DVM都是在Linux 中的一個程序,所以說可以認為是同一個概念.

22. Android專案工程下面的assets目錄的作用是什麼bA、放置應用到的圖片資源。

B、主要放置多媒體等資料檔案

C、放置字串,顏色,陣列等常量資料

D、放置一些與UI相應的佈局檔案,都是xml檔案

23. 關於res/raw目錄說法正確的是(a)A、 這裡的檔案是原封不動的儲存到裝置上不會轉換為

二進位制的格式

B、這裡的檔案是原封不動的儲存到裝置上會轉換為二進位制的格式 C、 這裡的檔案最終以二進位制

的格式儲存到指定的包中

D、這裡的檔案最終不會以二進位制的格式儲存到指定的包中 24. 下列對android NDK的理解正

確的是(abcd )A、 NDK是一系列工具的集合

B、 NDK 提供了一份穩定、功能有限的 API 標頭檔案宣告。

C、 使 “Java C” 的開發方式終於轉正,成為官方支援的開發方式

D、 NDK 將是 Android 平臺支援 C 開發的開端

二.填空題

25. android中常用的四個佈局是framlayout,linenarlayout,relativelayout和tablelayout。26.

android 的四大元件是activiey,service,broadcast和contentprovide。27. java.io包中的

objectinputstream和objectoutputstream類主要用於對物件(Object)的讀寫。28. android 中

service的實現方法是:startservice和bindservice。29. activity一般會過載7個方法用來維護其

生命週期,除了onCreate(),onStart(),onDestory() 外還有

onrestart,onresume,onpause,onstop。30. android的資料儲存的方式sharedpreference,文

件,SQlite,contentprovider,網路。31. 當啟動一個Activity並且新的Activity執行完後需要返回到

啟動它的Activity來執行 的回撥函式是startActivityResult()。32. 請使用命令列的方式建立一個

名字為myAvd,sdk版本為2.2,sd卡是在d盤的根目錄下,名字為scard.img, 並指定螢幕大小

HVGA.____________________________________。33. 程式執行的結果是:_____good

and gbc__________。 public classExample{

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';

}

}

34. 在android中,請簡述jni的呼叫過程。(8分)1)安裝和下載Cygwin,下載 Android NDK

2)在ndk專案中JNI介面的設計

3)使用C/C 實現本地方法

4)JNI生成動態連結庫.so檔案

5)將動態連結庫複製到java工程,在java工程中呼叫,執行java工程即可

35. 簡述Android應用程式結構是哪些?(7分)Android應用程式結構是:

Linux Kernel(Linux核心)、Libraries(系統執行庫或者是c/c 核心庫)、Application

Framework(開發框架包)、Applications (核心應用程式)

36. 請繼承SQLiteOpenHelper實現:(10分) 1).建立一個版本為1的“diaryOpenHelper.db”的

資料庫,

2).同時建立一個 “diary” 表(包含一個_id主鍵並自增長,topic字元型100

長度, content字元型1000長度)

3).在資料庫版本變化時請刪除diary表,並重新創建出diary表。

publicclass DBHelper extends SQLiteOpenHelper{

public final static String DATABASENAME ="diaryOpenHelper.db";

public final static int DATABASEVERSION =1;

//建立資料庫

public DBHelper(Context context,Stringname,CursorFactory factory,int version)

{

super(context, name, factory,version);

}

//建立表等機構性檔案

public void onCreate(SQLiteDatabase db)

{

String sql ="create tablediary"

"("

"_idinteger primary key autoincrement,"

"topicvarchar(100),"

"contentvarchar(1000)"

")";

db.execSQL(sql);

}

//若資料庫版本有更新,則呼叫此方法

public void onUpgrade(SQLiteDatabasedb,int oldVersion,int newVersion)

{

String sql = "drop table ifexists diary";

db.execSQL(sql);

this.onCreate(db);

}

}

37. 頁面上現有ProgressBar控制元件progressBar,請用書寫執行緒以10秒的的時間完成其進度顯示

工作。(10分)答案

publicclass ProgressBarStu extends Activity {

private ProgressBar progressBar = null;

protected void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.progressbar);

//從這到下是關鍵

progressBar = (ProgressBar)findViewById(R.id.progressBar);

Thread thread = new Thread(newRunnable() {

@Override

public void run() {

int progressBarMax =progressBar.getMax();

try {

while(progressBarMax!=progressBar.getProgress())

{

intstepProgress = progressBarMax/10;

intcurrentprogress = progressBar.getProgress();

progressBar.setProgress(currentprogress stepProgress);

Thread.sleep(1000);

}

} catch(InterruptedException e) {

// TODO Auto-generatedcatch block

e.printStackTrace();

}

}

});

thread.start();

//關鍵結束

}

}

38. 請描述下Activity的生命週期。 必呼叫的三個方法:onCreate() --> onStart() -->

onResume(),用AAA表示

(1)父Activity啟動子Activity,子Actvity退出,父Activity呼叫順序如下

AAA --> onFreeze() --> onPause() --> onStop() --> onRestart()--> onStart(),onResume() …

(2)使用者點選Home,Actvity呼叫順序如下

AAA --> onFreeze() --> onPause() --> onStop() -- Maybe -->onDestroy() – Maybe

(3)呼叫finish(), Activity呼叫順序如下

AAA --> onPause() --> onStop() --> onDestroy()

(4)在Activity上顯示dialog,Activity呼叫順序如下

AAA

(5)在父Activity上顯示透明的或非全屏的activity,Activity呼叫順序如下

AAA --> onFreeze() --> onPause()

(6)裝置進入睡眠狀態,Activity呼叫順序如下

AAA --> onFreeze() --> onPause()

39. 如果後臺的Activity由於某原因被系統回收了,如何在被系統回收之前儲存當前狀態?

onSaveInstanceState()

當你的程式中某一個Activity A在執行時,主動或被動地執行另一個新的Activity B,這個時候

A會執行onSaveInstanceState()。B完成以後又會來找A,這個時候就有兩種情況:一是A被回收,

二是A沒有被回收,被回收的A就要重新呼叫onCreate()方法,不同於直接啟動的是這回

onCreate()裡是帶上了引數savedInstanceState;而沒被收回的`就直接執行onResume(),跳過

onCreate()了。

40. 如何將一個Activity設定成視窗的樣式。 在AndroidManifest.xml 中定義Activity的地方

一句話android:theme="@android:style/Theme.Dialog"或

android:theme="@android:style/Theme.Translucent"就變成半透明的

41. 如何退出Activity?如何安全退出已呼叫多個Activity的Application?對於單一Activity的應用

來說,退出很簡單,直接finish()即可。

當然,也可以用killProcess()和System.exit()這樣的方法。

但是,對於多Activity的應用來說,在開啟多個Activity後,如果想在最後開啟的Activity直接退

出,上邊的方法都是沒有用的,因為上邊的方法都是結束一個Activity而已。

當然,網上也有人說可以。

就好像有人問,在應用裡如何捕獲Home鍵,有人就會說用keyCode比較KEYCODE_HOME即可,

而事實上如果不修改framework,根本不可能做到這一點一樣。

所以,最好還是自己親自試一下。

那麼,有沒有辦法直接退出整個應用呢?

在2.1之前,可以使用ActivityManager的restartPackage方法。

它可以直接結束整個應用。在使用時需要許可權android.permission.RESTART_PACKAGES。

注意不要被它的名字迷惑。

可是,在2.2,這個方法失效了。

在2.2添加了一個新的方法,killBackgroundProcesses(),需要許可權

android.permission.KILL_BACKGROUND_PROCESSES。

可惜的是,它和2.2的restartPackage一樣,根本起不到應有的效果。

另外還有一個方法,就是系統自帶的應用程式管理裡,強制結束程式的方

法,forceStopPackage()。

它需要許可權android.permission.FORCE_STOP_PACKAGES。

並且需要新增android:sharedUserId="android.uid.system"屬性

同樣可惜的是,該方法是非公開的,他只能執行在系統程序,第三方程式無法呼叫。

因為需要在Android.mk中新增LOCAL_CERTIFICATE := platform。

而Android.mk是用於在Android原始碼下編譯程式用的。

從以上可以看出,在2.2,沒有辦法直接結束一個應用,而只能用自己的辦法間接辦到。

現提供幾個方法,供參考:

1、拋異常強制退出:

該方法通過拋異常,使程式ForceClose。

驗證可以,但是,需要解決的問題是,如何使程式結束掉,而不彈出Force Close的視窗。

2、記錄開啟的Activity:

每開啟一個Activity,就記錄下來。在需要退出時,關閉每一個Activity即可。

3、傳送特定廣播:

在需要結束應用時,傳送一個特定的廣播,每個Activity收到廣播後,關閉即可。

4、遞迴退出

在開啟新的Activity時使用startActivityForResult,然後自己加標誌,在onActivityResult中處理,遞

歸關閉。

除了第一個,都是想辦法把每一個Activity都結束掉,間接達到目的。

但是這樣做同樣不完美。

你會發現,如果自己的應用程式對每一個Activity都設定了nosensor,在兩個Activity結束的間

隙,sensor可能有效了。

但至少,我們的目的達到了,而且沒有影響使用者使用。

為了程式設計方便,最好定義一個Activity基類,處理這些共通問題。

42. 請介紹下Android中常用的五種佈局。FrameLayout(框架佈局),LinearLayout (線性布

局),AbsoluteLayout(絕對佈局),RelativeLayout(相對佈局),TableLayout(表格佈局)

43. 請介紹下Android的資料儲存方式。一.SharedPreferences方式