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