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方式