Android面試題目及其答案

轉自:http://blog.csdn.net/wwj_748/article/details/8868640javascript

Android面試題目及其答案html

 

一、Android dvm的進程和Linux的進程, 應用程序的進程是否爲同一個概念java

 

  DVM指dalivk的虛擬機。每個Android應用程序都在它本身的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。而每個DVM都是在Linux中的一個進程,因此說能夠認爲是同一個概念。linux

 

二、sim卡的EF文件有何做用android

 

  sim卡的文件系統有本身規範,主要是爲了和手機通信,sim本 身能夠有本身的操做系統,EF就是做存儲並和手機通信用的c++

 

三、嵌入式操做系統內存管理有哪幾種,各有何特性git

 

  頁式,段式,段頁,用到了MMU,虛擬空間等技術web

 

四、 什麼是嵌入式實時操做系統,Android 操做系統屬於實時操做系統嗎?面試

 

  嵌入式實時操做系統是指當外界事件或數據產生時,可以接受並以足夠快的速度予以處理,其處理的結果又能在規定的時間以內來控制生產過程或對處理系統做出快速響應,並控制全部實時任務協調一致運行的嵌入式操做系統。主要用於工業控制、 軍事設備、 航空航天等領域對系統的響應時間有苛刻的要求,這就須要使用實時系統。又可分爲軟實時和硬實時兩種,而android是基於linux內核的,所以屬於軟實時。算法

 

五、一條最長的短信息約佔多少byte?

 

  中文70(包括標點),英文160,160個字節。

 

六、android中的動畫有哪幾類,它們的特色和區別是什麼?

 

  兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現方式能夠使視圖組件移動、放大、縮小以及產生透明度的變化;另外一種Frame動畫,傳統的動畫方法,經過順序的播放排列好的圖片來實現,相似電影。

 

七、handler機制的原理

 

  andriod提供了 Handler 和Looper 來知足線程間的通訊。Handler先進先出原則。Looper類用來管理特定線程內對象之間的消息交換(MessageExchange)。

 

  1)Looper: 一個線程能夠產生一個Looper對象,由它來管理此線程裏的MessageQueue(消息隊列)。

 

  2)Handler: 你能夠構造Handler對象來與Looper溝通,以便push新消息到Message Queue裏;或者接收Looper從MessageQueue取出)所送來的消息。

 

  3) Message Queue(消息隊列):用來存放線程放入的消息。

 

  4)線程:UI thread 一般就是mainthread,而Android啓動程序時會替它創建一個MessageQueue。

 

八、說說mvc模式的原理,它在android中的運用

 

 MVC(Model_view_controller)」模型_視圖_控制器」。MVC應用程序老是由這三個部分組成。Event(事件)致使Controller改變Model或View,或者同時改變二者。只要Controller改變了Models的數據或者屬性,全部依賴的View都會自動更新。相似的,只要Contro

 

九、Activity的生命週期

 

  和其餘手機平臺 的應用 程序 同樣,Android的應用程序 的生命週期是被統一掌控 的,也 就是說咱們寫的應用程序命運掌握在別人(系統)的手裏,咱們不能改變它,只能學習 並 適應它。

  簡單地說一下爲何是這樣:咱們手機在運行 一個應用程序的時候,有可能打進來電話 發進來短信 ,或者沒有電了,這時候程序都會被中斷,優先去服務電話的基本功能 ,另 外系統也不容許你佔用太多資源 ,至少要保證電話功能吧,因此資源不足的時候也就有可 能被幹掉。

 

  言歸正傳,Activity的基本生命週期以下代碼 所示:

 

  Java代碼

 

  1. public

 

  2. class MyActivity extends Activity {

 

  3. protected

 

  4. void onCreate(Bundle savedInstanceState);

 

  5.

 

  6. protected

 

  7. void onStart();

 

  8.

 

  9. protected

 

  10. void onResume();

 

  11.

 

  12. protected

 

  13. void onPause();

 

  14.

 

  15. protected

 

  16. void onStop();

 

  17.

 

  18. protected

 

  19. void onDestroy();

 

  20. }

 

  21.

 

  22.  public  class MyActivity extends Activity {

 

  protected   void onCreate(BundlesavedInstanceState);

 

  protected   void onStart();

 

  protected   void onResume();

 

  protected   void onPause();

 

  protected   void onStop();

 

 protected   void onDestroy();

 

  }

 

 

  你本身寫的Activity會按須要 重載這些方法,onCreate是免不了的,在一個Activity正常啓動的過程當中,他們被調用的順序是onCreate -> onStart -> onResume, 在Activity被幹掉的時候順序是onPause-> onStop -> onDestroy ,這樣就是一個完整的生命週期,可是有人問了 ,程序正運行着呢來電話了,這個程序咋辦?停止了唄,若是停止的時候新出的一個Activity是全屏的那麼:onPause->onStop,恢復的時候onStart->onResume,若是打斷 這個應用程序的是一個Theme爲Translucent或者Dialog的Activity那麼只是onPause,恢復 的時候onResume。

 

  詳細介紹一下這幾個方法中系統在作什麼以及咱們應該作什麼:

 

  onCreate: 在這裏建立界面 ,作一些數據 的初始化工做

 

  onStart: 到這一步變成用戶可見不可交互 的

 

  onResume: 變成和用戶可交互 的,(在activity 棧系統經過棧的方式管理這些個

 

  Activity的最上面,運行完彈出棧,則回到上一個Activity)

 

  onPause: 到這一步是可見但不可交互 的,系統會中止動畫 等消耗CPU 的事情   從上文的描述已經知道,應該在這裏保存你的一些數據,由於這個時候  你的程序的優先級下降,有可能被系統收回。在這裏保存的數據,應該在  onResume裏讀出來,注意:這個方法裏作的事情時間要短,由於下一 個activity不會等到這個方法完成才啓動

 

  onstop: 變得不可見 ,被下一個activity覆蓋了

 

  onDestroy: 這是activity被幹掉前最後一個被調用方法了,多是外面類調用finish方  法或者是系統爲了節省空間將它暫時性的幹掉,能夠用isFinishing()來判斷它,若是你有一個ProgressDialog在線程中轉動,請在onDestroy裏 把他cancel掉,否則等線程結束的時候,調用Dialog的cancel方法會拋 異常的。

 

  onPause,onstop, onDestroy,三種狀態 下activity都有可能被系統幹掉

 

 爲了保證程序的正確性,你要在onPause()裏寫上持久層操做的代碼,將用戶編輯的內容都保存到存儲介質上(通常都是數據庫 )。實際工做中由於生命週期的變化而帶來的問題也不少,好比你的應用程序起了新的線程在跑,這時候中斷了,你還要去維護那個線程,是暫停仍是殺掉仍是數據回滾,是吧?由於Activity可能被殺掉,因此線程中使用的變量和一些界面元素就千萬要注意了,通常我都是採用Android的消息機制[Handler,Message]來處理多線程和界面交互的問題。這個我後面會講一些,最近由於這些東西頭已經很大了,等我理清思緒再跟你們分享。ller改變了View,View會 從潛在的Model中獲取數據來刷新本身。

 

十、讓Activity變成一個窗口:Activity屬性設定

 

  講點輕鬆的吧,可能有人但願作出來的應用程序是一個漂浮在手機主界面的東西,那麼很 簡單你只須要設置 一下Activity的主題就能夠了在AndroidManifest.xml中定義Activity的地方一句話:

 

  Xml代碼

 

  1. android:theme="@android:style/Theme.Dialog"

 

  2.

 

  3. android:theme="@android:style/Theme.Dialog"

 

  android :theme="@android:style/Theme.Dialog"

 

  android:theme="@android:style/Theme.Dialog"

 

  這就使你的應用程序變成對話框的形式彈出來了,或者

 

  Xml代碼

 

  1.android:theme="@android:style/Theme.Translucent"

 

  2.

 

  3. android:theme="@android:style/Theme.Translucent"

 

  android:theme="@android:style/Theme.Translucent"

 

  android:theme="@android:style/Theme.Translucent"

 

  就變成半透明的,[友情提示-.-]相似的這種activity的屬性能夠在android.R.styleable類的AndroidManifestActivity方法中看到,AndroidManifest.xml中全部元素的屬性的介紹均可以參考這個類android.R.styleable

 

  上面說的是屬性名稱,具體有什麼值是在android.R.style中 能夠看到,好比這個"@android:style/Theme.Dialog"就對應於android.R.style.Theme_Dialog,('_'換成'.'< --注意:這個是文章內容不是笑臉)就能夠用在描述文件 中了,找找類定義和描述文件中的對應關係就都明白了。

 

十一、 你後臺的Activity被系統回收怎麼辦:onSaveInstanceState

 

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

 

  Java代碼

 

  1. public

 

  2. void onSaveInstanceState(Bundle outState) {

 

  3. super.onSaveInstanceState(outState);

 

  4. outState.putLong("id", 1234567890);

 

  5. }

 

  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代碼

 

  1. if(savedInstanceState != null){

 

  2. long id = savedInstanceState.getLong("id");

 

  3. }

 

  if(savedInstanceState != null){

 

  long id = savedInstanceState.getLong("id");

 

  }

 

  就像官方的Notepad教程 裏的狀況,你正在編輯某一個note,忽然被中斷,那麼就把這個note的id記住,再起來的時候就能夠根據這個id去把那個note取出來,程序就完整一些。這也是看你的應用需不須要保存什麼,好比你的界面就是讀取一個列表,那就不須要特殊記住什麼,哦, 沒準你須要記住滾動條的位置...

 

十二、 調用與被調用:咱們的通訊使者Intent

 

  要說Intent了,Intent就是這個這個意圖 ,應用程序間Intent進行交流,打個電話啦,來個 電話啦都會發Intent, 這個是Android架構的鬆耦合的精髓部分,大大提升了組件的複用性,好比你要在你的應用程序中點擊按鈕,給某人打電話,很簡單啊,看下代碼先:

 

  Java代碼

 

  1. Intent intent = new Intent();

 

  2. intent.setAction(Intent.ACTION_CALL);

 

  3. intent.setData(Uri.parse("tel:" + number));

 

4.startActivity(intent);

 

  Intent intent = new Intent();

 

  intent.setAction(Intent.ACTION_CALL);

 

  intent.setData(Uri.parse("tel:"+ number));

 

  startActivity(intent);

 

  扔出這樣一個意圖,系統看到了你的意圖就喚醒了電話撥號程序,打出來電話。什麼讀聯繫人,發短信啊,郵件啊,通通只須要扔出intent就行了,這個部分設計 地確實很好啊。

 

  那Intent經過什麼來告訴系統須要誰來接受他呢?

 

  一般使用Intent有兩種方法,第一種是直接說明須要哪個類來接收代碼以下:

 

  Java代碼

 

  1. Intent intent = new Intent(this, MyActivity.class);

 

  2. intent.getExtras().putString("id","1");

 

  3. tartActivity(intent);

 

  Intent intent = new Intent(this, MyActivity.class);

 

  intent.getExtras().putString("id","1");

 

  tartActivity(intent);

 

  第一種方式很明顯,直接指定了MyActivity爲接受者,而且傳了一些數據給MyActivity,在MyActivity裏能夠用getIntent()來的到這個intent和數據。

 

  第二種就須要先看一下AndroidMenifest中的intentfilter的配置了

 

  Xml代碼

 

  < intent-filter>

 

  < action

 

  android:name="android.intent.action.VIEW"

 

  />

 

  < action

 

  android:value="android.intent.action.EDIT"

 

  />

 

  < action

 

  android:value="android.intent.action.PICK"

 

  />

 

  < category

 

  android:name="android.intent.category.DEFAULT"

 

  />

 

  < data

 

  android:mimeType="vnd.android.cursor.dir/vnd.google.note"

 

  />

 

  < /intent-filter>

 

  這裏面配置用到了action, data, category這些東西,那麼聰明的你必定想到intent裏也會有這些東西,而後一匹配不就找到接收者了嗎?

 

  action其實就是一個意圖的字符串名稱。

 

  上面這段intent-filter的配置文件說明了這個Activity能夠接受不一樣的Action,固然相應的程序邏輯也不同咯,提一下那個mimeType,他是在ContentProvider裏定義的,你要是本身實現一個ContentProvider就知道了,必須指定

mimeType才能讓數據被別人使用。

 

  不知道原理說明白沒,總結一句,就是你調用別的界面不是直接new那個界面,而是經過扔出一個intent,讓系統幫你去調用那個界面,這樣就多麼鬆藕合啊,並且符合了生命週期被系統管理的原則。

 

  想知道category都有啥,Android爲你預先定製好的action都有啥等等,請親自訪問官方連接Intent

 

  ps:想知道怎麼調用系統應用程序的同窗,能夠仔細看一下你的logcat,每次運行一個程序的時候是否是有一些信息好比:

 

  Starting activity: Intent {action=android.intent.action.MAINcategories={android.intent.category.LAUNCHER}flags=0x10200000comp={com.android.camera/com.android.camera.GalleryPicker} }

 

  再對照一下Intent的一些set方法,就知道怎麼調用咯,但願你喜歡:)

 

 

 

 

 

 

 

 

 

  

 

  1三、什麼是ANR 如何避免它?

 

  答:ANR:Application Not Responding,五秒

 

在Android中,活動管理器和窗口管理器這兩個系統服務負責監視應用程序的響應。當出現下列狀況時,Android就會顯示ANR對話框了:

 

  對輸入事件(如按鍵、觸摸屏事件)的響應超過5秒

 

  意向接受器(intentReceiver)超過10秒鐘仍未執行完畢

 

  Android應用程序徹底運行在一個獨立的線程中(例如main)。這就意味着,任何在主線程中運行的,須要消耗大量時間的操做都會引起ANR。由於此時,你的應用程序已經沒有機會去響應輸入事件和意向廣播(Intentbroadcast)。

 

  所以,任何運行在主線程中的方法,都要儘量的只作少許的工做。特別是活動生命週期中的重要方法如onCreate()和onResume()等更應如此。潛在的比較耗時的操做,如訪問網絡和數據庫;或者是開銷很大的計算,好比改變位圖的大小,須要在一個單獨的子線程中完成(或者是使用異步請求,如數據庫操做)。但這並不意味着你的主線程須要進入阻塞狀態已等待子線程結束-- 也不須要調用Therad.wait()或者Thread.sleep()方法。取而代之的是,主線程爲子線程提供一個句柄(Handler),讓子線程在即將結束的時候調用它(xing:能夠參看Snake的例子,這種方法與之前咱們所接觸的有所不一樣)。使用這種方法涉及你的應用程序,可以保證你的程序對輸入保持良好的響應,從而避免由於輸入事件超過5秒鐘不被處理而產生的ANR。這種實踐須要應用到全部顯示用戶界面的線程,由於他們都面臨着一樣的超時問題。

 

  1四、什麼狀況會致使Force Close ?如何避免?可否捕獲致使其的異常?

 

  答:通常像空指針啊,能夠看起logcat,而後對應到程序中 來解決錯誤

 

  1五、Android自己的api並未聲明會拋出異常,則其在運行時有無可能拋出runtime異常,你遇到過嗎?諾有的話會致使什麼問題?如何解決?

 

  1六、簡要解釋一下activity、intent 、intentfilter、service、Broadcase、BroadcaseReceiver

 

  答:一個activity呈現了一個用戶能夠操做的可視化用戶界面

 

  一個service不包含可見的用戶界面,而是在後臺無限地運行

 

  能夠鏈接到一個正在運行的服務中,鏈接後,能夠經過服務中暴露出來的藉口與其進行通訊

 

  一個broadcast receiver是一個接收廣播消息並做出迴應的component,broadcastreceiver沒有界面

 

  intent:content provider在接收到ContentResolver的請求時被激活。

 

  activity, service和broadcast receiver是被稱爲intents的異步消息激活的。

 

一個intent是一個Intent對象,它保存了消息的內容。對於activity和service來講,它指定了請求的操做名稱和待操做數據的URI

 

  Intent對象能夠顯式的指定一個目標component。若是這樣的話,android會找到這個component(基於manifest文件中的聲明)並激活它。但若是一個目標不是顯式指定的,android必須找到響應intent的最佳component。

 

  它是經過將Intent對象和目標的intent filter相比較來完成這一工做的。一個component的intentfilter告訴android該component能處理的intent。intentfilter也是在manifest文件中聲明的。

 

  1七、IntentService有何優勢?

 

  答:IntentService 的好處

 

  * Acitivity的進程,當處理Intent的時候,會產生一個對應的Service

 

  * Android的進程處理器如今會盡量的不kill掉你

 

  * 很是容易使用

 

  1八、橫豎屏切換時候activity的生命週期?

 

  一、不設置Activity的android:configChanges時,切屏會從新調用各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次

 

  二、設置Activity的android:configChanges="orientation"時,切屏仍是會從新調用各個生命週期,切橫、豎屏時只會執行一次

 

  三、設置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會從新調用各個生命週期,只會執行onConfigurationChanged方法

 

  

 

 

 

19. 如何將SQLite數據庫(dictionary.db文件)與apk文件一塊兒發佈?

 

  解答:能夠將dictionary.db文件複製到Eclipse Android工程中的resaw目錄中。全部在resaw目錄中的文件不會被壓縮,這樣能夠直接提取該目錄中的文件。能夠將dictionary.db文件複製到resaw目錄中

 

 20. 如何將打開res aw目錄中的數據庫文件?

 

  解答:在Android中不能直接打開res aw目錄中的數據庫文件,而須要在程序第一次啓動時將該文件複製到手機內存或SD卡的某個目錄中,而後再打開該數據庫文件。複製的基本方法是使用getResources().openRawResource方法得到resaw目錄中資源的InputStream對象,而後將該InputStream對象中的數據寫入其餘的目錄中相應文件中。在Android SDK中能夠使用SQLiteDatabase.openOrCreateDatabase方法來打開任意目錄中的SQLite數據庫文件。

 

  21. Android引入廣播機制的用意?

 

  答:a:從MVC的角度考慮(應用程序內)

 

 其實回答這個問題的時候還能夠這樣問,android爲何要有那4大組件,如今的移動開發模型基本上也是照搬的web那一套MVC架構,只不過是改了點嫁妝而已。android的四大組件本質上就是爲了實現移動或者說嵌入式設備上的MVC架構,它們之間有時候是一種相互依存的關係,有時候又是一種補充關係,引入廣播機制能夠方便幾大組件的信息和數據交互。

 

  b:程序間互通消息(例如在本身的應用程序內監聽系統來電)

 

  c:效率上(參考UDP的廣播協議在局域網的方便性)

 

d:設計模式上(反轉控制的一種應用,相似監聽者模式)

1. 請描述下Activity的聲明週期。

 onCreate->onStart->onRemuse->onPause->onStop->onRestart->onDestroy

 

 

 

2. 若是後臺的Activity因爲某種緣由被系統回收,如何在回收以前保存當前狀態。

onSaveInstanceState().

程序中的某一個ActivityA 在運行時,主動或被動的運行另外一個新的Activity B,這個時候A會執行onSaveInstanceState()。B完成之後又回來找A,這個時候有兩種狀況:一是A被回收,二是A沒有被回收,被回收的A就要從新調用onCreate()方法,不一樣於直接啓動的是這回onCreate()裏是帶上了參數savedInstanceState;而沒被回收的就直接執行onResume(),跳過onCreate()。

 

 

 

3. 如何將一個Activity設置成窗口樣式。

在AndroidManifext.xml中Activity定義處添加

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

android:theme="@android:style/Theme.Translucent"。

 

 

 

 

4. 如何退出Activity?如何安全退出已調用多個Activity的Application?

1.Activity.finish();

也能夠用killProcess()和System.exit()這樣的方法

2.用ActivityManager的restartPackage方法

 

 

 

5. 請介紹下android大衆經常使用的五種佈局。

FrameLayout(框架佈局)

只能夠有一個控件,而且不能設計這個控件的位置,控件會放在左上角

LinearLayout(線性佈局)

一行只能控制一個控件的線性佈局,因此當有不少控件須要在一個界面中列出時,能夠用LinearLayout佈局

AbsoluteLayout(絕對佈局)

能夠放置多個控件,而且能夠本身定義控件的x,y的位置

RelativeLayout(相對佈局)

好比要在一行上顯示多個控件,這時就要用到相對佈局

TableLayout(表格佈局)

將子元素的位置分配到行或列中,一個TableLayout由許多的TableRow組成

 

 

6. 請介紹下android的數據存儲方式。

SharedPreferences方式

用來存儲」key-valuepaires」格式的數據,它是一個輕量級的鍵值存儲機制,只能夠存儲基本數據類型,能夠經過它保存一些上次用戶所作的修改操做

文件存儲方式

它經過FileInputStream和FileOutputStream對文件進行操做。可是在Android中,文件是一個應用程序私有的,一個應用程序沒法讀寫其餘應用程序的文件,若是要共享數據就用Content Providers

SQLite數據庫方式

Android提供的一個標準的數據庫,支持SQL語句

內容提供器(Contentprovider)方式

是全部應用程序之間數據存儲和檢索的橋樑,它的做用是使得各個應用程序之間實現數據共享

網絡存儲方式

經過網絡來存儲和獲取數據

 

 

7。請介紹下ContentProvider是如何實現數據共享的。

 Android提供了ContentProvider,一個程序能夠經過實現一個ContentProvider的抽象接口將本身的數據徹底暴露出去,並且ContentProviders是以相似數據庫中表的方式將數據暴露,也就是說ContentProvider就像一個「數據庫」。那麼外界獲取其提供的數據,也就應該與從數據庫中獲取數據的操做基本同樣,只不過是採用URI來表示外界須要訪問的「數據庫」。外部訪問經過ContentResolver去訪問並操做這些被暴露的數據。

 

 

8。如何啓用Service,如何停用Service。

Intent intent = new Intent();

intent.setClass(this,cba.class);

startService(intent);

stopService(intent);

 

 

9。註冊廣播有幾種方式,這些方式有何優缺點?Android引入廣播機制的用意。

 2種方式

1.    在androidmainfest.xml中註冊  

2.    <receiver>

3.        <intent-filter>

4.           <action android:name = "android.intent.action.PICK"/>

5.        </intent-filter>

6.    </receiver>

7.    缺點:常駐型,佔資源比較大

8.   

9.    registerReceiver(receiver,filter);  BroadcastReceiver更新UI通常用這種方法

 

 

10. 請解釋下在單線程模型中Message,Handler,Message Queue,Looper之間的關係。

 Message

   Message消息,理解爲線程間交流的信息,處理數據後臺線程須要更新UI,則發送Message內含一些數據給UI線程。

2. Handler

   Handler處理者,是Message的主要處理者,負責Message的發送,Message內容的執行處理。後臺線程就是經過傳進來的 Handler對象引用來sendMessage(Message)。而使用Handler,須要implement 該類的 handleMessage(Message)

方法,它是處理這些Message的操做內容,例如Update UI。一般須要子類化Handler來實現handleMessage方法。

Message Queue

   Message Queue消息隊列,用來存放經過Handler發佈的消息,按照先進先出執行。

    每一個message queue都會有一個對應的Handler。Handler會向message queue經過兩種方法發送消息:sendMessage或post。這兩種消息都會插在message queue隊尾並按先進先出執行。但經過這兩種方法發送的消息執行的方式略有不一樣:經過sendMessage發送的是一個message對象,會被 Handler的handleMessage()函數處理;而經過post方法發送的是一個runnable對象,則會本身執行。

4. Looper

   Looper是每條線程裏的MessageQueue的管家。Android沒有Global的Message Queue,而Android會自動替主線程(UI線程)創建Message Queue,但在子線程裏並無創建Message Queue。因此調用Looper.getMainLooper()獲得的主線程的Looper不爲NULL,但調用Looper.myLooper() 獲得當前線程的Looper就有可能爲NULL。

    對於子線程使用Looper,API Doc提供了正確的使用方法:

 

11. AIDL的全程是什麼?如何工做?能處理哪些類型的數據?

AIDL的英文全稱是Android Interface Define Language

當A進程要去調用B進程中的service時,並實現通訊,咱們一般都是經過AIDL來操做的

A工程:

首先咱們在net.blogjava.mobile.aidlservice包中建立一個RemoteService.aidl文件,在裏面咱們自定義一個接口,含有方法get。ADT插件會在gen目錄下自動生成一個RemoteService.java文件,該類中含有一個名爲RemoteService.stub的內部類,該內部類中含有aidl文件接口的get方法。

說明一:aidl文件的位置不固定,能夠任意

而後定義本身的MyService類,在MyService類中自定義一個內部類去繼承RemoteService.stub這個內部類,實現get方法。在onBind方法中返回這個內部類的對象,系統會自動將這個對象封裝成IBinder對象,傳遞給他的調用者。

其次須要在AndroidManifest.xml文件中配置MyService類,代碼以下:

<!-- 註冊服務 --> 

<serviceandroid:name=".MyService">

 <intent-filter>

  <!--  指定調用AIDL服務的ID  -->

      <actionandroid:name="net.blogjava.mobile.aidlservice.RemoteService" />

   </intent-filter>

</service>

爲何要指定調用AIDL服務的ID,就是要告訴外界MyService這個類可以被別的進程訪問,只要別的進程知道這個ID,正是有了這個ID,B工程才能找到A工程實現通訊。

說明:AIDL並不須要權限

B工程:

     首先咱們要將A工程中生成的RemoteService.java文件拷貝到B工程中,在bindService方法中綁定aidl服務

     綁定AIDL服務就是將RemoteService的ID做爲intent的action參數。

     說明:若是咱們單獨將RemoteService.aidl文件放在一個包裏,那個在咱們將gen目錄下的該包拷貝到B工程中。若是咱們將RemoteService.aidl文件和咱們的其餘類存放在一塊兒,那麼咱們在B工程中就要創建相應的包,以保證RmoteService.java文件的報名正確,咱們不能修改RemoteService.java文件

          bindService(newInten("net.blogjava.mobile.aidlservice.RemoteService"),serviceConnection, Context.BIND_AUTO_CREATE);

      ServiceConnection的onServiceConnected(ComponentName name, IBinder service)方法中的service參數就是A工程中MyService類中繼承了RemoteService.stub類的內部類的對象。

 

 Android採用RPC的方式來實現(remoteprocedure call)遠程通訊,而且Android經過接口定義語言AIDL來生成兩個進程之間互相訪問的代碼。例如,你在Activity裏的代碼須要訪問Service中的一個方法,那麼就能夠經過這種方法來實現了。

?      建立一個AIDL文件(參見代碼)

?      實現AIDL文件生成的Java接口(參見代碼)

?      將你的接口暴露給客戶端

?      客戶端調用

 

 

12. 請解釋下Android程序運行時權限與文件系統權限的區別。

 Android程序運行  是虛擬機Dalvik( android受權)

  文件系統   是 linux 內核 受權

 

 

13. 系統上安裝了多種瀏覽器,可否指定某瀏覽器訪問指定頁面?

 webkit

 

 

14. 有一個一維整型數組int[] data保存的是一張寬爲width,高爲height的圖片像素值信息。請寫一個算法,將該圖片全部的白色不透明(0xffffffff)像素點的透明度調整爲50%。

 

 

15. 你如何評價Android系統?優缺點。

優勢:開源特性,獲得衆多廠商支持。

軟件發展很快。

界面UI,系統優化不錯。

缺點:版本過多,升級過快。

用戶體驗不一致。

 

 

16. android中的動畫有哪幾類,他們的特色和區別是什麼?

兩種,

一種是Tween動畫(補間動畫),

一種是Frame動畫(逐幀動畫)。

Tween動畫:使試圖組件移動,放大,縮小以及產生透明度的變化。

Frame動畫:傳統的動畫方法,經過順序的播放排列好的圖片來實現,相似電影。

 

 

17. 橫豎屏切換時activity的生命週期

不設置Activity的android:configChanges時,切屏會從新調用各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次。

設置Activity的android:configChanges="orientation"時,切橫,豎屏時生命週期只會執行一次。

設置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會從新調用聲明週期,只會執行onConfigurationChanged方法。

 

進程與線程

當一個程序開始運行時,它就是一個進程,進程包含運行中的程序和程序所使用的內存和系統資源。而一個進程又是由多個線程組成的。引入線程優勢是易於調度,提供開發效率,經過線程能夠方便有效的實現併發,進程可建立多個線程來執行同一個程序的不一樣部分,開銷小,建立線程比建立進程要快,所需開銷不多。

 

宏就是把一系列經常使用的操做做爲一個總體,保存起來,之後用的時候直接經過必定方式用就是了

先說宏和函數的區別:

1. 宏作的是簡單的字符串替換(注意是字符串的替換,不是其餘類型參數的替換),而函數的參數的傳遞,參數是有數據類型的,能夠是各類各樣的類型.

2. 宏的參數替換是不經計算而直接處理的,而函數調用是將實參的值傳遞給形參,既然說是值,天然是計算得來的.

3. 宏在編譯以前進行,即先用宏體替換宏名,而後再編譯的,而函數顯然是編譯以後,在執行時,才調用的.所以,宏佔用的是編譯的時間,而函數佔用的是執行時的時間.

4. 宏的參數是不佔內存空間的,由於只是作字符串的替換,而函數調用時的參數傳遞則是具體變量之間的信息傳遞,形參做爲函數的局部變量,顯然是佔用內存的.

5. 函數的調用是須要付出必定的時空開銷的,由於系統在調用函數時,要保留現場,而後轉入被調用函數去執行,調用完,再返回主調函數,此時再恢復現場,這些操做,顯然在宏中是沒有的.

定義一個宏替代兩個輸入數的乘積

怎麼寫?

#include<stdio.h>

#define MULTIPLY(x,y) ((x)*(y))

int main()

{

 intx,y,z;

 scanf("%d%d",&x,&y);

 z=MULTIPLY(x,y);

 printf("%d",z);

 return 0;

}

 

------------------------------------------------------------------------------------------------------------------------

 

Android 面試題經典

一、 Android dvm的進程和Linux的進程, 應用程序的進程是否爲同一個概念

  DVM指dalivk的虛擬機。每個Android應用程序都在它本身的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。而每個DVM都是在Linux 中的一個進程,因此說能夠認爲是同一個概念。

  二、sim卡的EF 文件有何做用

  sim卡的文件系統有本身規範,主要是爲了和手機通信,sim本 身能夠有本身的操做系統,EF就是做存儲並和手機通信用的

  三、嵌入式操做系統內存管理有哪幾種, 各有何特性

  頁式,段式,段頁,用到了MMU,虛擬空間等技術

  四、 什麼是嵌入式實時操做系統, Android 操做系統屬於實時操做系統嗎?

  嵌入式實時操做系統是指當外界事件或數據產生時,可以接受並以足夠快的速度予以處理,其處理的結果又能在規定的時間以內來控制生產過程或對處理系統做出快速響應,並控制全部實時任務協調一致運行的嵌入式操做系統。主要用於工業控制、軍事設備、航空航天等領域對系統的響應時間有苛刻的要求,這就須要使用實時系統。又可分爲軟實時和硬實時兩種,而android是基於linux內核的,所以屬於軟實時。

  五、一條最長的短信息約佔多少byte?

  中文70(包括標點),英文160,160個字節。

  六、 android中的動畫有哪幾類,它們的特色和區別是什麼?

  兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現方式能夠使視圖組件移動、放大、縮小以及產生透明度的變化;另外一種Frame動畫,傳統的動畫方法,經過順序的播放排列好的圖片來實現,相似電影。

  七、handler機制的原理

  andriod提供了 Handler 和 Looper 來知足線程間的通訊。Handler 先進先出原則。Looper類用來管理特定線程內對象之間的消息交換(MessageExchange)。

  1)Looper: 一個線程能夠產生一個Looper對象,由它來管理此線程裏的Message Queue(消息隊列)。

  2)Handler: 你能夠構造Handler對象來與Looper溝通,以便push新消息到Message Queue裏;或者接收Looper從Message Queue取出)所送來的消息。

  3) MessageQueue(消息隊列):用來存放線程放入的消息。

  4)線程:UI thread 一般就是main thread,而Android啓動程序時會替它創建一個Message Queue。

  八、說說mvc模式的原理,它在android中的運用

android的官方建議應用程序的開發採用mvc模式。何謂mvc?

 

  mvc是model,view,controller的縮寫,mvc包含三個部分:

 

  l模型(model)對象:是應用程序的主體部分,全部的業務邏輯都應該寫在該層。

 

  l視圖(view)對象:是應用程序中負責生成用戶界面的部分。也是在整個mvc架構中用戶惟一能夠看到的一層,接收用戶的輸入,顯示處理結果。

 

  l控制器(control)對象:是根據用戶的輸入,控制用戶界面數據顯示及更新model對象狀態的部分,控制器更重要的一種導航功能,想用用戶出發的相關事件,交給m哦得了處理。

 

  android鼓勵弱耦合和組件的重用,在android中mvc的具體體現以下:

 

  1)視圖層(view):通常採用xml文件進行界面的描述,使用的時候能夠很是方便的引入,固然,如何你對android瞭解的比較的多了話,就必定能夠想到在android中也能夠使用javascript+html等的方式做爲view層,固然這裏須要進行java和javascript之間的通訊,幸運的是,android提供了它們之間很是方便的通訊實現。

 

  2)控制層(controller):android的控制層的重任一般落在了衆多的acitvity的肩上,這句話也就暗含了不要在acitivity中寫代碼,要經過activity交割model業務邏輯層處理,這樣作的另一個緣由是android中的acitivity的響應時間是5s,若是耗時的操做放在這裏,程序就很容易被回收掉。

 

  3)模型層(model):對數據庫的操做、對網絡等的操做都應該在model裏面處理,固然對業務計算等操做也是必須放在的該層的。

  九、Activity的生命週期

  和其餘手機 平臺的應用 程序 同樣,Android的應用程序 的生命週期是被統一掌控 的,也

  就是說咱們寫的應用程序命運掌握在別人(系統)的手裏,咱們不能改變它,只能學習 並

  適應它。

  簡單地說一下爲何是這樣:咱們手機在運行 一個應用程序的時候,有可能打進來電話

  發進來短信 ,或者沒有電了,這時候程序都會被中斷,優先去服務電話的基本功能,另

  外系統也不容許你佔用太多資源 ,至少要保證電話功能吧,因此資源不足的時候也就有可

  能被幹掉。

  言歸正傳,Activity的基本生命週期以下代碼 所示:

  Java代碼

  public

  classMyActivity extends Activity {

  protected

  voidonCreate(Bundle savedInstanceState);

  protected

  voidonStart();

  protected

  voidonResume();

  protected

  voidonPause();

  protected

  voidonStop();

protected

  voidonDestroy();

  }

  public classMyActivity extends Activity { protected void onCreate(BundlesavedInstanceState); protected void onStart(); protected void onResume();protected void onPause(); protected void onStop(); protected void onDestroy();}

  你本身寫的Activity會按須要重載這些方法,onCreate是免不了的,在一個Activity正常啓動的過程當中,他們被調用的順序是 onCreate ->onStart -> onResume, 在Activity被幹掉的時候順序是onPause -> onStop -> onDestroy ,這樣就是一個完整的生命週期,可是有人問了,程序正運行着呢來電話了,這個程序咋辦?停止了唄,若是停止的時候新出的一個Activity是全屏的那麼:onPause->onStop ,恢復的時候onStart->onResume ,若是打斷這個應用程序的是一個Theme爲Translucent 或者Dialog 的Activity那麼只是onPause ,恢復的時候onResume 。

  詳細介紹一下這幾個方法中系統在作什麼以及咱們應該作什麼:

  onCreate: 在這裏建立界面 ,作一些數據 的初始化工做

  onStart: 到這一步變成用戶可見不可交互 的

  onResume: 變成和用戶可交互 的,(在activity 棧系統經過棧的方式管理這些個

  Activity的最上面,運行完彈出棧,則回到上一個Activity)

  onPause: 到這一步是可見但不可交互 的,系統會中止動畫 等消耗CPU 的事情

  從上文的描述已經知道,應該在這裏保存你的一些數據,由於這個時候

  你的程序的優先級下降,有可能被系統收回。在這裏保存的數據,應該在

  onResume裏讀出來,注意:這個方法裏作的事情時間要短,由於下一

  個activity不會等到這個方法完成才啓動

  onstop: 變得不可見 ,被下一個activity覆蓋了

  onDestroy: 這是activity被幹掉前最後一個被調用方法了,多是外面類調用finish方

  法或者是系統爲了節省空間將它暫時性的幹掉,能夠用isFinishing()來判

  斷它,若是你有一個ProgressDialog在線程中轉動,請在onDestroy裏

  把他cancel掉,否則等線程結束的時候,調用Dialog的cancel方法會拋

  異常的。

  onPause,onstop, onDestroy,三種狀態 下 activity都有可能被系統幹掉

爲了保證程序的正確性,你要在onPause()裏寫上持久層操做的代碼,將用戶編輯的內容都保存到存儲介質上(通常都是數據庫 )。實際工做中由於生命週期的變化而帶來的問題也不少,好比你的應用程序起了新的線程在跑,這時候中斷了,你還要去維護那個線程,是暫停仍是殺掉仍是數據回滾,是吧?由於Activity可能被殺掉,因此線程中使用的變量和一些界面元素就千萬要注意了,通常都是採用Android的消息機制 [Handler,Message]來處理多線程和界面交互的問題。

  十、讓Activity變成一個窗口:Activity屬性設定

  講點輕鬆的吧,可能有人但願作出來的應用程序是一個漂浮在手機主界面的東西,那麼很

  簡單你只須要設置 一下Activity的主題就能夠了在AndroidManifest.xml 中定義 Activity的

  地方一句話:

  Xml代碼

  android:theme=」@android:style/Theme.Dialog」

  android:theme=」@android:style/Theme.Dialog」

  這就使你的應用程序變成對話框的形式彈出來了,或者

  Xml代碼

  android:theme=」@android:style/Theme.Translucent」

  android:theme=」@android:style/Theme.Translucent」

  就變成半透明的,[友情提示-.-]相似的這種activity的屬性能夠在android.R.styleable 類的AndroidManifestActivity 方法中看到,AndroidManifest.xml中全部元素的屬性的介紹均可以參考這個類android.R.styleable

  上面說的是屬性名稱,具體有什麼值是在android.R.style中能夠看到,好比這個」@android:style/Theme.Dialog」就對應於android.R.style.Theme_Dialog ,(‘_’換成’.’ < --注意:這個是文章內容不是笑臉)就能夠用在描述文件 中了,找找類定義和描述文件中的對應關係就都明白了。

  十一、 你後臺的Activity被系統回收怎麼辦:onSaveInstanceState

當你的程序中某一個ActivityA 在運行時中,主動或被動地運行另外一個新的Activity B

  這個時候A會執行

  Java代碼

  public

  voidonSaveInstanceState(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取出來,程序就完整一些。這也是看你的應用需不須要保存什麼,好比你的界面就是讀取一個列表,那就不須要特殊記住什麼,哦,沒準你須要記住滾動條的位置...

  十二、 調用與被調用:咱們的通訊使者Intent

  要說Intent了,Intent就是這個這個意圖 ,應用程序間Intent進行交流,打個電話啦,來個

  電話啦都會發Intent,這個是Android架構的鬆耦合的精髓部分,大大提升了組件的複用性,好比你要在你的應用程序中點擊按鈕,給某人打電話,很簡單啊,看下代碼先:

  Java代碼

  Intentintent = new Intent();

  intent.setAction(Intent.ACTION_CALL);

  intent.setData(Uri.parse("tel:"+ number));

  startActivity(intent);

  扔出這樣一個意圖,系統看到了你的意圖就喚醒了電話撥號程序,打出來電話。什麼讀聯繫人,發短信啊,郵件啊,通通只須要扔出intent就行了,這個部分設計地確實很好啊。

  那Intent經過什麼來告訴系統須要誰來接受他呢?

  一般使用Intent有兩種方法,第一種是直接說明須要哪個類來接收代碼以下:

  Java代碼

  Intentintent = new Intent(this, MyActivity.class);

  intent.getExtras().putString("id","1");

  tartActivity(intent);

  第一種方式很明顯,直接指定了MyActivity爲接受者,而且傳了一些數據給MyActivity,在MyActivity裏能夠用getIntent()來的到這個intent和數據。

  第二種就須要先看一下AndroidMenifest中的intentfilter的配置了

  Xml代碼

  <intent-filter>

  < action

  android:name="android.intent.action.VIEW"

  />

  < action

  android:value="android.intent.action.EDIT"

  />

  < action

  android:value="android.intent.action.PICK"

  />

  <category

  android:name="android.intent.category.DEFAULT"

  />

  < data

  android:mimeType="vnd.android.cursor.dir/vnd.google.note"

  />

  </intent-filter>

  這裏面配置用到了action,data, category這些東西,那麼聰明的你必定想到intent裏也會有這些東西,而後一匹配不就找到接收者了嗎?

  action其實就是一個意圖的字符串名稱。

  上面這段intent-filter的配置文件說明了這個Activity能夠接受不一樣的Action,固然相應的程序邏輯也不同咯,提一下那個 mimeType,他是在ContentProvider裏定義的,你要是本身實現一個ContentProvider就知道了,必須指定 mimeType才能讓數據被別人使用。

  不知道原理說明白沒,總結一句,就是你調用別的界面不是直接new那個界面,而是經過扔出一個intent,讓系統幫你去調用那個界面,這樣就多麼鬆藕合啊,並且符合了生命週期被系統管理的原則。

  想知道category都有啥,Android爲你預先定製好的action都有啥等等,請親自訪問官方連接Intent

  ps:想知道怎麼調用系統應用程序的同窗,能夠仔細看一下你的logcat,每次運行一個程序的時候是否是有一些信息好比:

  Startingactivity: Intent { action=android.intent.action.MAINcategories={android.intent.category.LAUNCHER}flags=0x10200000comp={com.android.camera/com.android.camera.GalleryPicker} }

  再對照一下Intent的一些set方法,就知道怎麼調用咯,但願你喜歡:)

  13. 如何退出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,沒有辦法直接結束一個應用,而只能用本身的辦法間接辦到。

 

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

 

一、拋異常強制退出:

該方法經過拋異常,使程序ForceClose。

驗證能夠,可是,須要解決的問題是,如何使程序結束掉,而不彈出Force Close的窗口。

 

二、記錄打開的Activity:

每打開一個Activity,就記錄下來。在須要退出時,關閉每個Activity便可。

 

三、發送特定廣播:

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

 

四、遞歸退出

在打開新的Activity時使用startActivityForResult,而後本身加標誌,在onActivityResult中處理,遞歸關閉。

 

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

可是這樣作一樣不完美。

你會發現,若是本身的應用程序對每個Activity都設置了nosensor,在兩個Activity結束的間隙,sensor可能有效了。

但至少,咱們的目的達到了,並且沒有影響用戶使用。

 

爲了編程方便,最好定義一個Activity基類,處理這些共通問題。

摘自:http://blog.csdn.net/debug2/archive/2011/02/18/6193644.aspx

  14. 請介紹下Android中經常使用的五種佈局。

一、 LinearLayout – 線性佈局。

orientation –容器內元素的排列方式。vertical: 子元素們垂直排列;horizontal: 子元素們水平排列

gravity –內容的排列形式。經常使用的有 top, bottom, left,right, center 等

 

二、 AbsoluteLayout – 絕對佈局。

layout_x – x 座標。以左上角爲頂點

layout_y – y 座標。以左上角爲頂點

 

三、 TableLayout – 表格式佈局

表格佈局主要以行列的形式來管理子控件,其中每一行即一個TableRow對象,每一個TableRow對象能夠添加子控件,而且每加入一個空間即至關於添加了一列

 

四、 RelativeLayout – 相對佈局。

layout_centerInParent – 將當前元素放置到其容器內的水平方向和垂直方向的中央位置(相似的屬性有:layout_centerHorizontal, layout_alignParentLeft 等)

layout_marginLeft – 設置當前元素相對於其容器的左側邊緣的距離

layout_below –放置當前元素到指定的元素的下面

layout_alignRight – 當前元素與指定的元素右對齊

 

五、 FrameLayout – 層疊佈局。以左上角爲起點,將 FrameLayout 內的元素一層覆蓋一層地顯示,在幀佈局中,先添加的圖片會被後添加的圖片覆蓋。

摘自:http://javalover00000.javaeye.com/blog/851266

  15. 請介紹下Android的數據存儲方式。

Android提供了5種方式存儲數據:

一、使用SharedPreferences存儲數據;

二、文件存儲數據;

三、SQLite數據庫存儲數據;

四、使用ContentProvider存儲數據;

五、網絡存儲數據;

Android 中的數據存儲都是私有的,其餘應用程序都是沒法訪問的,除非經過ContentResolver獲取其餘程序共享的數據。

摘自:http://www.moandroid.com/?p=319

  16. 請介紹下ContentProvider是如何實現數據共享的。

一個程序能夠經過實現一個Contentprovider的抽象接口將本身的數據徹底暴露出去,並且Content providers是以相似數據庫中表的方式將數據暴露。Content providers存儲和檢索數據,經過它可讓全部的應用程序訪問到,這也是應用程序之間惟一共享數據的方法。要想使應用程序的數據公開化,可經過2種方法:建立一個屬於你本身的Contentprovider或者將你的數據添加到一個已經存在的Content provider中,前提是有相同數據類型而且有寫入Content provider的權限。

 

如何經過一套標準及統一的接口獲取其餘應用程序暴露的數據?Android提供了ContentResolver,外界的程序能夠經過ContentResolver接口訪問ContentProvider提供的數據。

參考:http://www.moandroid.com/?p=319

  17. 如何啓用Service,如何停用Service。

1.第一種是經過調用Context.startService()啓動,調用Context.stopService()結束,startService()能夠傳遞參數給Service

 

2.第二種方式是經過調用Context.bindService()啓動,調用Context.unbindservice()結束,還能夠經過ServiceConnection訪問Service。

在Service每一次的開啓關閉過程當中,只有onStart可被屢次調用(經過屢次startService調用),其餘onCreate,onBind,onUnbind,onDestory在一個生命週期中只能被調用一次。

參考:http://www.cnblogs.com/feisky/archive/2010/06/14/1758336.html

  18. 註冊廣播有幾種方式,這些方式有何優缺點?請談談Android引入廣播機制的用意。

android中,不一樣進程之間傳遞信息要用到廣播,能夠有兩種方式來實現。

第一種方式:在Manifest.xml中註冊廣播,是一種比較推薦的方法,由於它不須要手動註銷廣播(若是廣播未註銷,程序退出時可能會出錯)。

具體實如今Manifest的application中添加:

 

<receiverandroid:name=".mEvtReceiver">

   <intent-filter>

   <action android:name="android.intent.action.BOOT_COMPLETED"/>

   </intent-filter>

</receiver>

 

上面兩個android:name分別是廣播名和廣播的動做(這裏的動做是表示系統啓動完成),若是要本身發送一個廣播,在代碼中爲:

Intent i = newIntent(「android.intent.action.BOOT_COMPLETED」);

sendBroadcast(i);

這樣,廣播就發出去了,而後是接收。

接收能夠新建一個類,繼承至BroadcastReceiver,也能夠建一個BroadcastReceiver的實例,而後得寫onReceive方法,實現以下:

protected BroadcastReceiver mEvtReceiver =new BroadcastReceiver() {

@Override

public void onReceive(Context context,Intent intent) {

String action = intent.getAction();

if(action.equals(「android.intent.action.BOOT_COMPLETED」)) {

//Do something

}

}

};

 

第二種方式,直接在代碼中實現,但須要手動註冊註銷,實現以下:

IntentFilter filter = new IntentFilter();

filter.addAction(「android.intent.action.BOOT_COMPLETED」);

registerReceiver(mEvtReceiver, filter); //這時註冊了一個recevier ,名爲mEvtReceiver,而後一樣用上面的方法以重寫onReceiver,

最後在程序的onDestroy中要註銷廣播,實現以下:

@Override

public void onDestroy() {

super.onDestroy();

unregisterReceiver(mPlayerEvtReceiver);

}

Android系統中的廣播是普遍用於應用程序之間通訊的一種手段,它相似於事件處理機制,不一樣的地方就是廣播的處理是系統級別的事件處理過程(通常事件處理是控件級別的)。在此過程當中仍然是離不開Intent對象,理解廣播事件的處理過程,靈活運用廣播處理機制,在關鍵之處每每能實現特別的效果,

在Android 中若是要發送一個廣播必須使用sendBroadCast 向系統發送對其感興趣的廣播接收器中。

使用廣播必需要有一個intent對象必設置其action動做對象

使用廣播必須在配置文件中顯式的指明該廣播對象

每次接收廣播都會從新生成一個接收廣播的對象

在BroadCast 中儘可能不要處理太多邏輯問題,建議複雜的邏輯交給Activity 或者 Service 去處理

轉自:http://www.dengdeng.name/u/deng/archives/2010/92.html

 

http://www.cnblogs.com/TerryBlog/archive/2010/08/16/1801016.html

 

  19. 請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關係。

簡單的說,Handler獲取當前線程中的looper對象,looper用來從存放Message的MessageQueue中取出Message,再有Handler進行Message的分發和處理

參見:http://hi.baidu.com/???????/blog/item/4e576b7c58d742360cd7dac9.html

 

http://blog.csdn.net/xuxinyl/archive/2010/12/25/6097560.aspx

 

  20. AIDL的全稱是什麼?如何工做?能處理哪些類型的數據?

AIDL全稱Android Interface Definition Language(AndRoid接口描述語言)是一種藉口描述語言; 編譯器能夠經過aidl文件生成一段代碼,經過預先定義的接口達到兩個進程內部通訊進程跨界對象訪問的目的.AIDL的IPC的機制和COM或CORBA相似, 是基於接口的,但它是輕量級的。它使用代理類在客戶端和實現層間傳遞值. 若是要使用AIDL, 須要完成2件事情: 1. 引入AIDL的相關類.; 2. 調用aidl產生的class.理論上, 參數能夠傳遞基本數據類型和String, 還有就是Bundle的派生類, 不過在Eclipse中,目前的ADT不支持Bundle作爲參數,

具體實現步驟以下:

 

一、建立AIDL文件, 在這個文件裏面定義接口, 該接口定義了可供客戶端訪問的方法和屬性。

 

二、編譯AIDL文件, 用Ant的話, 可能須要手動, 使用Eclipse plugin的話,能夠根據adil文件自動生產java文件並編譯, 不須要人爲介入.

 

三、在Java文件中, 實現AIDL中定義的接口. 編譯器會根據AIDL接口, 產生一個JAVA接口。這個接口有一個名爲Stub的內部抽象類,它繼承擴展了接口並實現了遠程調用須要的幾個方法。接下來就須要本身去實現自定義的幾個接口了.

四、向客戶端提供接口ITaskBinder, 若是寫的是service,擴展該Service並重載onBind ()方法來返回一個實現上述接口的類的實例。

五、在服務器端回調客戶端的函數. 前提是當客戶端獲取的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

  21. 請解釋下Android程序運行時權限與文件系統權限的區別。

apk程序是運行在虛擬機上的,對應的是Android獨特的權限機制,只有體現到文件系統上時才使用linux的權限設置。

android系統有的權限是基於簽名的。

具體參見:http://blog.csdn.net/Zengyangtech/archive/2010/07/20/5749999.aspx

  22. 系統上安裝了多種瀏覽器,可否指定某瀏覽器訪問指定頁面?請說明起因。

經過直接發送Uri把參數帶過去,或者經過manifest裏的intentfilter裏的data屬性

  23. 有一個一維整型數組int[]data保存的是一張寬爲width,高爲height的圖片像素值信息。請寫一個算法,將該圖片全部的白色不透明(0xffffffff)像素點的透明度調整爲50%。

  2四、什麼是ANR 如何避免它?

  答:ANR:Application Not Responding,五秒在Android中,活動管理器和窗口管理器這兩個系統服務負責監視應用程序的響應。當出現下列狀況時,Android就會顯示ANR對話框了:

  對輸入事件(如按鍵、觸摸屏事件)的響應超過5秒

  意向接受器(intentReceiver)超過10秒鐘仍未執行完畢

  Android應用程序徹底運行在一個獨立的線程中(例如main)。這就意味着,任何在主線程中運行的,須要消耗大量時間的操做都會引起ANR。由於此時,你的應用程序已經沒有機會去響應輸入事件和意向廣播(Intentbroadcast)。

  所以,任何運行在主線程中的方法,都要儘量的只作少許的工做。特別是活動生命週期中的重要方法如onCreate()和 onResume()等更應如此。潛在的比較耗時的操做,如訪問網絡和數據庫;或者是開銷很大的計算,好比改變位圖的大小,須要在一個單獨的子線程中完成 (或者是使用異步請求,如數據庫操做)。但這並不意味着你的主線程須要進入阻塞狀態已等待子線程結束 — 也不須要調用Therad.wait()或者Thread.sleep()方法。取而代之的是,主線程爲子線程提供一個句柄(Handler),讓子線程在即將結束的時候調用它(xing:能夠參看Snake的例子,這種方法與之前咱們所接觸的有所不一樣)。使用這種方法涉及你的應用程序,可以保證你的程序對輸入保持良好的響應,從而避免由於輸入事件超過5秒鐘不被處理而產生的ANR。這種實踐須要應用到全部顯示用戶界面的線程,由於他們都面臨着一樣的超時問題。

  2五、什麼狀況會致使Force Close ?如何避免?可否捕獲致使其的異常?

  答:通常像空指針啊,能夠看起logcat,而後對應到程序中 來解決錯誤

  2六、Android自己的api並未聲明會拋出異常,則其在運行時有無可能拋出runtime異常,你遇到過嗎?諾有的話會致使什麼問題?如何解決?

  2七、簡要解釋一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver

  答:一個activity呈現了一個用戶能夠操做的可視化用戶界面

  一個service不包含可見的用戶界面,而是在後臺無限地運行

  能夠鏈接到一個正在運行的服務中,鏈接後,能夠經過服務中暴露出來的藉口與其進行通訊

  一個broadcastreceiver是一個接收廣播消息並做出迴應的component,broadcast receiver沒有界面

  intent:contentprovider在接收到ContentResolver的請求時被激活。

  activity,service和broadcastreceiver是被稱爲intents的異步消息激活的。

一個intent是一個Intent對象,它保存了消息的內容。對於activity和service來講,它指定了請求的操做名稱和待操做數據的URI

  Intent對象能夠顯式的指定一個目標component。若是這樣的話,android會找到這個component(基於 manifest文件中的聲明)並激活它。但若是一個目標不是顯式指定的,android必須找到響應intent的最佳component。

  它是經過將Intent對象和目標的intent filter相比較來完成這一工做的。一個component的intent filter告訴android該component能處理的intent。intent filter也是在manifest文件中聲明的。

  2八、IntentService有何優勢?

  答:IntentService的好處

  * Acitivity的進程,當處理Intent的時候,會產生一個對應的Service

  * Android的進程處理器如今會盡量的不kill掉你

  * 很是容易使用

  2九、橫豎屏切換時候activity的生命週期?

  一、不設置Activity的android:configChanges時,切屏會從新調用各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次

  二、設置Activity的android:configChanges=」orientation」時,切屏仍是會從新調用各個生命週期,切橫、豎屏時只會執行一次

  三、設置Activity的android:configChanges=」orientation|keyboardHidden」時,切屏不會從新調用各個生命週期,只會執行onConfigurationChanged方法

  30. 如何將SQLite數據庫(dictionary.db文件)與apk文件一塊兒發佈?

  解答:能夠將dictionary.db文件複製到Eclipse Android工程中的res aw目錄中。全部在res aw目錄中的文件不會被壓縮,這樣能夠直接提取該目錄中的文件。能夠將dictionary.db文件複製到res aw目錄中

  31. 如何將打開res aw目錄中的數據庫文件?

  解答:在Android中不能直接打開res aw目錄中的數據庫文件,而須要在程序第一次啓動時將該文件複製到手機內存或SD卡的某個目錄中,而後再打開該數據庫文件。複製的基本方法是使用getResources().openRawResource方法得到res aw目錄中資源的 InputStream對象,而後將該InputStream對象中的數據寫入其餘的目錄中相應文件中。在Android SDK中能夠使用SQLiteDatabase.openOrCreateDatabase方法來打開任意目錄中的SQLite數據庫文件。

  32. Android引入廣播機制的用意?

  答:a:從MVC的角度考慮(應用程序內)

 其實回答這個問題的時候還能夠這樣問,android爲何要有那4大組件,如今的移動開發模型基本上也是照搬的web那一套MVC架構,只不過是改了點嫁妝而已。android的四大組件本質上就是爲了實現移動或者說嵌入式設備上的MVC架構,它們之間有時候是一種相互依存的關係,有時候又是一種補充關係,引入廣播機制能夠方便幾大組件的信息和數據交互。

  b:程序間互通消息(例如在本身的應用程序內監聽系統來電)

  c:效率上(參考UDP的廣播協議在局域網的方便性)

  d:設計模式上(反轉控制的一種應用,相似監聽者模式)

轉自:http://www.cnmsdn.com/html/201101/1295431222ID9251.html

3三、android 的優點與不足

Android平臺手機 5大優點:

1、開放性

在優點方面,Android平臺首先就是其開發性,開發的平臺容許任何移動終端廠商加入到Android聯盟中來。顯著的開放性能夠使其擁有更多的開發者,隨着用戶和應用的日益豐富,一個嶄新的平臺也將很快走向成熟

開發性對於Android的發展而言,有利於積累人氣,這裏的人氣包括消費者和廠商,而對於消費者來說,隨大的受益正是豐富的軟件資源。開放的平臺也會帶來更大競爭,如此一來,消費者將能夠用更低的價位購得心儀的手機。

2、掙脫運營商的束縛

 

在過去很長的一段時間,特別是在歐美地區,手機應用每每受到運營商制約,使用什麼功能接入什麼網絡,幾乎都受到運營商的控制。從去年iPhone 上市,用戶能夠更加方便地鏈接網絡,運營商的制約減小。隨着EDGE、HSDPA這些2G至3G移動網絡的逐步過渡和提高,手機隨意接入網絡已不是運營商口中的笑談,當你能夠經過手機IM軟件方便地進行即時聊天時,再回想不久前天價的彩信和圖鈴下載業務,是否是像噩夢同樣?

互聯網巨頭Google推進的Android終端天生就有網絡特點,將讓用戶離互聯網更近。

3、豐富的硬件選擇

這一點仍是與Android平臺的開放性相關,因爲Android的開放性,衆多的廠商會推出千奇百怪,功能特點各具的多種產品。功能上的差別和特點,卻不會影響到數據同步、甚至軟件的兼容,比如你從諾基亞 Symbian風格手機 一下改用蘋果 iPhone ,同時還可將Symbian中優秀的軟件帶到iPhone上使用、聯繫人等資料更是能夠方便地轉移,是否是很是方便呢?

4、不受任何限制的開發商

Android平臺提供給第三方開發商一個十分寬泛、自由的環境,不會受到各類條條框框的阻擾,可想而知,會有多少新穎別緻的軟件會誕生。但也有其兩面性,血腥、暴力、情色方面的程序和遊戲如可控制正是留給Android難題之一。

5、無縫結合的Google應用

現在叱詫互聯網的Google已經走過10年度歷史,從搜索巨人到全面的互聯網滲透,Google服務如地圖、郵件、搜索等已經成爲鏈接用戶和互聯網的重要紐帶,而Android平臺手機將無縫結合這些優秀的Google服務。

再說Android的5大不足:

1、安全和隱私

因爲手機與互聯網的緊密聯繫,我的隱私很可貴到保守。除了上網過程當中經意或不經意留下的我的足跡,Google這個巨人也時時站在你的身後,洞穿一切,所以,互聯網的深刻將會帶來新一輪的隱私危機。

2、首先開賣Android手機的不是最大運營商

衆所周知,T-Mobile在23日,於美國紐約發佈了Android首款手機G1。可是在北美市場,最大的兩家運營商乃AT&T和Verizon,而目前所知取得Android手機銷售權的僅有 T-Mobile和Sprint,其中T-Mobile的3G網絡相對於其餘三家也要遜色很多,所以,用戶能夠買帳購買G1,可否體驗到最佳的3G網絡服務則要另當別論了!

3、運營商仍然可以影響到Android手機

在國內市場,很多用戶對購得移動定製機不滿,感受所購的手機被人塗畫了廣告通常。這樣的狀況在國外市場一樣出現。Android手機的另外一發售運營商Sprint就將在其機型中內置其手機商店程序。

4、同類機型用戶減小

在很多手機論壇都會有針對某一型號的子論壇,對一款手機的使用心得交流,並分享軟件資源。而對於Android平臺手機,因爲廠商豐富,產品類型多樣,這樣使用同一款機型的用戶愈來愈少,缺乏統一機型的程序強化。舉個稍顯不當的例子,如今山寨機氾濫,品種各異,就不多有專門針對某個型號山寨機的討論和羣組,除了哪些功能異常搶眼、頗受追捧的機型之外。

5、過度依賴開發商缺乏標準配置

在 使用PC端的Windows Xp系統的時候,都會內置微軟Windows Media Player這樣一個瀏覽器程序,用戶能夠選擇更多樣的播放器,如Realplay或暴風影音等。但入手開始使用默認的程序一樣能夠應付多樣的須要。在Android平臺中,因爲其開放性,軟件更多依賴第三方廠商,好比Android系統的SDK中就沒有內置音樂播放器,所有依賴第三方開發,缺乏了產品的統一性。

3四、android 中有哪幾種解析xml的類?官方推薦哪一種?以及它們的原理和區別。

XML解析主要有三種方式,SAX、DOM、PULL。常規在PC上開發咱們使用Dom相對輕鬆些,但一些性能敏感的數據庫或手機上仍是主要採用SAX方式,SAX讀取是單向的,優勢:不佔內存空間、解析屬性方便,但缺點就是對於套嵌多個分支來講處理不是很方便。而DOM方式會把整個XML文件加載到內存中去,這裏Android開發網提醒你們該方法在查找方面能夠和XPath很好的結合若是數據量不是很大推薦使用,而PULL經常用在J2ME對於節點處理比較好,相似SAX方式,一樣很節省內存,在J2ME中咱們常用的KXML庫來解析。

詳細狀況請參考http://blog.csdn.net/Android_Tutor/archive/2010/09/17/5890835.aspx

 

http://www.linuxidc.com/Linux/2010-11/29768.htm

 

http://littlefermat.blog.163.com/blog/static/59771167200981853037951/

 

3五、DDMS和TraceView的區別?

DDMS是一個程序執行查看器,在裏面能夠看見線程和堆棧等信息,TraceView是程序性能分析器

3六、Activity被回收了怎麼辦?

只有另啓用了

3七、java中如何引用本地語言

能夠用JNI接口

3八、談談Android的IPC機制

IPC是內部進程通訊的簡稱,是共享」命名管道」的資源。Android中的IPC機制是爲了讓Activity和Service之間能夠隨時的進行交互,故在Android中該機制,只適用於Activity和Service之間的通訊,相似於遠程方法調用,相似於C/S模式的訪問。經過定義AIDL接口文件來定義IPC接口。Servier端實現IPC接口,Client端調用IPC接口本地代理。

3九、NDK是什麼

NDK是一些列工具的集合,

NDK提供了一系列的工具,幫助開發者迅速的開發C/C++的動態庫,並能自動將so和java 應用打成apk包。

NDK集成了交叉編譯器,並提供了相應的mk文件和隔離cpu、平臺等的差別,開發人員只需簡單的修改mk文件就能夠建立出so

40 描述一下android的系統架構

android系統架構分從下往上爲linux 內核層、運行庫、應用程序框架層、和應用程序層

linuxkernel:負責硬件的驅動程序、網絡、電源、系統安全以及內存管理等功能。

 

  libraries和 androidruntime:libraries:即c/c++函數庫部分,大多數都是開放源代碼的函數庫,例如webkit,該函數庫負責 android網頁瀏覽器的運行,例如標準的c函數庫libc、openssl、sqlite等,固然也包括支持遊戲開發2dsgl和 3dopengles,在多媒體方面有mediaframework框架來支持各類影音和圖形文件的播放與顯示,例如mpeg四、h.26四、mp三、 aac、amr、jpg和png等衆多的多媒體文件格式。android的runtime負責解釋和執行生成的dalvik格式的字節碼。

 

  applicationframework(應用軟件架構),java應用程序開發人員主要是使用該層封裝好的api進行快速開發。

 

  applications:該層是java的應用程序層,android內置的googlemaps、e-mail、即時通訊工具、瀏覽器、mp3播放器等處於該層,java開發人員開發的程序也處於該層,並且和內置的應用程序具備平等的位置,能夠調用內置的應用程序,也能夠替換內置的應用程序。

 

  上面的四個層次,下層爲上層服務,上層須要下層的支持,調用下層的服務,這種嚴格分層的方式帶來的極大的穩定性、靈活性和可擴展性,使得不一樣層的開發人員能夠按照規範專心特定層的開發。

 

  android應用程序使用框架的api並在框架下運行,這就帶來了程序開發的高度一致性,另外一方面也告訴咱們,要想寫出優質高效的程序就必須對整個 applicationframework進行很是深刻的理解。精通applicationframework,你就能夠真正的理解android的設計和運行機制,也就更可以駕馭整個應用層的開發。

 

 

 

 

----------------------------------------------------------------------------------------------------------------

 

 

一些常見的Android面試基礎題作下總結,看看你能作出多少道?

 

 

 

1. Intent的幾種有關Activity啓動的方式有哪些,你瞭解每一個含義嗎?

 

 

 

--------------------------------------------------------------------------------

 

 

    這裏Android123提示你們,Intent的一些標記有FLAG_ACTIVITY_BROUGHT_TO_FRONT、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET、FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS、FLAG_ACTIVITY_MULTIPLE_TASK和FLAG_ACTIVITY_NEW_TASK 等。每種含義你們看SDK文檔和具體跑下這樣你的記憶會更深入些。

 

  2.Activity和Task的啓動模式有哪些? 每種含義是什麼?

 

 

--------------------------------------------------------------------------------

 

   有關在AndroidManifest.xml中的android:launchMode定義,主要有standard、singleTop、singleTask和singleInstance,同時對於android:taskAffinity這些問題你們也要了解,Android開發網在之前的文章中講過,不過不少開發者仍然不是很清楚,這些基礎問題咱們之後仍然會再次總結。

 

   關於Activity的啓動模式,參考:http://blog.csdn.net/feng88724/archive/2011/05/11/6412638.aspx

 

  3. 經過Intent傳遞一些二進制數據的方法有哪些?

 

 

--------------------------------------------------------------------------------

 

  1). 使用Serializable接口實現序列化,這是Java經常使用的方法。

 

  2). 實現Parcelable接口,這裏Android的部分類好比Bitmap類就已經實現了,同時Parcelable在Android AIDL中交換數據也很常見的。

 

  4. 能說下Android應用的入口點嗎?

 

 

--------------------------------------------------------------------------------

 

  真正的Android入口點是application的main,你能夠看下androidmanifest.xml的包含關係就清楚了。 能夠沒有Activity可是必須有Application

 

5. Android都有哪些XML解析器,都熟練掌握嗎?

 

 

--------------------------------------------------------------------------------

 

  這裏XmlPull、SAX和DOM相信作過Web開發的都已經倒背如流了。

 

  6.SQLite支持事務嗎? 添加刪除如何提升性能?

 

 

--------------------------------------------------------------------------------

 

 SQLite做爲輕量級的數據庫,比MySQL還小,但支持SQL語句查詢,提升性能能夠考慮經過原始通過優化的SQL查詢語句方式處理。

 

  7.Android Service和Binder、AIDL你都熟練嗎?

 

 

--------------------------------------------------------------------------------

 

  做爲Android重要的後臺服務,這些每一個Android開發者都應該掌握,這也算是和Java SE最大的不一樣了,具體的實例你們能夠查看Android音樂播放器的源代碼Music.git中的,這裏再也不贅述。

 

8. 你用過哪款Android手機,有哪些優勢和不足,相對於iPhone或Symbian又有哪些優缺點?

 

 

--------------------------------------------------------------------------------

 

   把這個做爲面試題也是考察下,能夠大概瞭解到它對Android的瞭解程度,多移動開發的認識。

 

【2011-5-12 補充】

 

 

 

--------------------------------------------------------------------------------

 

 

1.   請描述下Activity的生命週期。

 

 

 

 

建立 oncreate-  啓動onstart – 恢復 onResume – 暫停 onPause – 結束 onEnd – 銷燬onDestroy

 

 

 

 

2.   若是後臺的Activity因爲某緣由被系統回收了,如何在被系統回收以前保存當前狀態?

 

 

 

 

在」暫停 onPause」 狀態將數據保存。

 

 

 

3.   如何將一個Activity設置成窗口的樣式。

 

 

 

 

設置Theme。

 

 

 

 

4.   如何退出Activity?如何安全退出已調用多個Activity的Application?

 

 

 

 

5.   請介紹下Android中經常使用的五種佈局。

 

 

 

 

線性佈局LinearLayout, 相對佈局 RelativeLayout

 

 

表單佈局TableLayout,

絕對佈局AbsLayout(已淘汰)

 

 

幀佈局FrameLayout

 

 

 

 

6.   請介紹下Android的數據存儲方式。

 

 

 

 

Preference,文件,數據庫SQlite,網絡存儲

 

 

 

 

7.   請介紹下ContentProvider是如何實現數據共享的。

 

 

 

 

 

8.   如何啓用Service,如何停用Service。

 

 

 

 

啓動:

Context.startService()

and

Context.bindService().

 

 

關閉:Context.stopService().

 

          Service.stopSelf()

or

Service.stopSelfResult()

 

 

 

 

9.   註冊廣播有幾種方式,這些方式有何優缺點?請談談Android引入廣播機制的用意。

 

 

 

10.   請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關係。

 

 

 

11.   AIDL的全稱是什麼?如何工做?能處理哪些類型的數據?

 

 

 

12.   請解釋下Android程序運行時權限與文件系統權限的區別。(Edited by Sodino)

 

 

 

13.   系統上安裝了多種瀏覽器,可否指定某瀏覽器訪問指定頁面?請說明起因。

 

 

 

14.   有一個一維整型數組int[]data保存的是一張寬爲width,高爲height的圖片像素值信息。請寫一個算法,將該圖片全部的白色不透明(0xffffffff)像素點的透明度調整爲50%。

 

 

 

15.   你如何評價Android系統?優缺點。 (這一題重複了)

 

 

 

 

優點:

1、開放性 3、豐富的硬件選擇5、無縫結合的Google應用支持

 

缺點:  1、安全和隱私

二,開發商自定義,不夠統一 4、同類機型用戶減小

 

【2011-5-12 補充】

 

 

 

--------------------------------------------------------------------------------

 

 

一、什麼是ANR 如何避免它?

 

 

 

http://blog.csdn.net/Zengyangtech/archive/2010/11/21/6025671.aspx

 

 

 

二、什麼狀況會致使Force Close ?如何避免?可否捕獲致使其的異常?

 

 

 

 

三、Android自己的api並未聲明會拋出異常,則其在運行時有無可能拋出runtime異常,你遇到過嗎?諾有的話會致使什麼問題?如何解決?

 

 

 

 

會有運行時異常, 運行時異常無需捕捉

 

四、簡要解釋一下activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver

 

 

 

      這個問題問的很廣泛,本身多看看吧。在此很少說了!

 

 

五、IntentService有何優勢?

 

 

 

【2011-5-12 補充】

 

 

 

--------------------------------------------------------------------------------

 

 

1. android:paddingLeft與android:layout_marginLeft的區別

 

當按鈕分別設置以上兩個屬性時,獲得的效果是不同的。

android:paddingLeft="30px"

按鈕上設置的內容(例如圖片)離按鈕左邊邊界30個像素

android:layout_marginLeft="30px"

整個按鈕離左邊設置的內容30個像素

 

 

 

 

2. Android 動畫有哪幾種?描述一下

 

 

兩種。 Tween動畫和Frame動畫。 Tween動畫主要是透明度、尺寸伸縮、旋轉、位移等效果。

 

 

 

Frame動畫能夠理解成gif, 一幀一幀的顯示圖片。比較經常使用的有滾動條效果。

 

 

 

 

3. 對Intent、Activity、廣播、Service等的理解。

 

 

 

4. 哪些狀況下會發生ANR ? 怎麼對應 ? (這個問題也重複了)

 

  Application Not Response。

 

 

 

 

5. 隱式、顯式Intent的區別

 

·   顯式意圖

 

經過名字指明目標組件(這個組件名字字段component name field,

前面提到過,

有一個數值集)。既然組件名稱一般不爲其餘應用程序的開發者所瞭解,顯式意圖典型的被用做應用程序的內部消息-例如一個活動啓動一個附屬服務或姊妹活動。

 

 

   隱式意圖

 

不命名目標組件(組件名稱字段爲空)。隱式意圖常常用來激活其餘應用程序的組件。

 

    這一塊參考Intent說明,能夠同時看一下Notepad的例子, 幫助理解,我的感受很重要!

 

(上面幾個問題感受都不錯,各位本身查漏補缺吧!有些尚未寫答案的, 各位有空能夠回答一下~ 我會將你的答案填充上去)

 

 

 

-------------------------------------------------------------------

 

2011-07-05 補充

 

 

 

返回鍵與Home鍵區別?

 

 

 

back鍵默認行爲是finish處於前臺的Activity的即Activity的狀態爲Destroy狀態爲止,再次啓動該Activity是從onCreate開始的(不會調用onSaveInstanceState方法)。Home鍵默認是stop前臺的Activity即狀態爲onStop爲止而不是Destroy,若再次啓動它,會調用onSaveInstanceState方法,保持上次Activity的狀態則是從OnRestart開始的---->onStart()--->onResume()。

 

 

一、Android操做系統是Google在什麼時間公佈的

A、2007年11月5日   B、2010年5月20日晚10點30分   C、2009年11月10日

正確答案:A

二、Android基於什麼平臺的開源智能手機操做系統名稱

A、WinCE    B、Linux   C、SHP  

正確答案:B

三、Linux平臺由如下下哪些組成?

A、操做系統  B、中間件   C、用戶界面   D、應用軟件

正確答案:ABCD

四、Android操做系統主要的特色是:(         )

A、與Google無縫結合        B、實現個性化應用   

C、良好的平臺開放性         D、軟件均要收費

正確答案:ABC

五、Android操做系統向開發人員提供是

A、所有免費    B、部分收費     C、只有10%左右是收費的

正確答案:A

六、Android個性化界面設置的添加方式

A、點選屏幕下方添加鍵進行添加   B、長按屏幕空白處進行添加  C、直接拖拽至屏幕進行添加

正確答案:ABC

七、個性化界面設置不一樣內容包括:

A、快捷方式   B、小插件   C、窗口小部件      D、文件夾

正確答案:ABCD

八、Android操做系統採用全新解鎖方式描述正確的是:(    )

A、自定義圖型解鎖; B、滑動解鎖; C、規定圖型解鎖; D、只可側鍵解鎖;

正確答案:AB

九、Android支持谷歌全方位移動服務,豐富最新網絡體驗包括:

A、電子市場;    B、GoogleTalk;    C、Google搜索;  

D、G-mail郵箱;  E、Google地圖

正確答案:ABCDE

十、截止2010年12月,中國上市的Andriod操做系統已經發布瞭如下哪幾個版本

A、1.0      B、1.3     C、1.5      D、1.6      E 、2.0   F、2.1   G、2.2

正確答案:ACDEFG

十一、在中國,如下哪些屬於Android軟件主要下載門戶?(       )

A、安卓網    B、機鋒網     C、百度      D、Google    E、優億市場

正確答案:ABE

十二、Android安裝軟件後綴是:(       )

A..sis         B.cab          C..apk         D..jar

正確答案:C

1三、如下哪些不是Android操做系統的版本:(      )

A、1.0     B、1.3     C、 2.0      D、2.1      E 、2.2

正確答案:B

1四、Android操做平臺的開放性也針對了衆多手機品版的廠家進行了徹底的開放,如下有哪幾個品牌的手機從未使用過Android操做系統:(       )

A.HTC     B.I phone       C.samsung         D.諾基亞        E.黑莓

正確答案:BDE

1五、Android1.5操做系統叫(         )

A.紙杯蛋糕    B.甜甜圈     C.法式奶油夾心甜點    D.果餡餅    E.凍酸奶

正確答案:A

1六、Android1.6操做系統叫(         )

A.紙杯蛋糕    B.甜甜圈     C.法式奶油夾心甜點    D.果餡餅    E.凍酸奶

正確答案:B

1七、Android2.0操做系統叫(         )

A.紙杯蛋糕    B.甜甜圈     C.法式奶油夾心甜點    D.果餡餅    E.凍酸奶

正確答案:C

1八、Android2.1操做系統叫(         )

A.紙杯蛋糕    B.甜甜圈     C.法式奶油夾心甜點    D.果餡餅    E.凍酸奶

正確答案:D

1九、Android2.2操做系統叫(         )

A.紙杯蛋糕    B.甜甜圈     C.法式奶油夾心甜點    D.果餡餅    E.凍酸奶

正確答案:E

20、Android2.2操做系統與Android2.1操做系統對比有哪些方面的提高(         )

A.總體性能大幅度的提高    B.3G網絡共享功能     C.全面的Flash支持

D.App 2 sd功能(安裝程序到SD卡)     E.全新的軟件商店

F.更好的網絡體驗

正確答案:ABCDEF

2一、Android系統能夠同時運行多個程序嗎?(         )

A.能夠; B.不能夠

正確答案:A

2二、如下對Android操做系統描述正確的是:(        )

A.系統資源佔用少,系統運行速度快

B.徹底開放性的操做系統,對全部軟件開發商、手機廠商、運營商平等享有

C.有衆多的軟件提供給消費者下載

D.個性化的操做界面,操做簡單

正確答案:ABCD

2三、Android操做系統的手機能夠有如下幾個方法進行軟件安裝(       )

A.經過手機直接登錄百度網站下載安裝;

B.經過手機直接登錄Android門戶網站進行下載安裝;

C.經過數據線與電腦鏈接直接下載安裝;

D.經過PC終端上網下載至SD卡里再插入手機進行安裝;

正確答案:ABCD

2四、Android操做系統具備個性化操做界面設置,如下關於進行添加描述正確的是(       )

A.點選屏幕下方添加鍵進行添加      B.長按屏幕空白處進行添加

C.直接拖拽至屏幕進行添加          D.不可直接拖拽至屏幕進行添加

正確答案:ABC

2六、Android從哪一個版本開始支持動態壁紙(       )

A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

正確答案:D

2七、Android從哪一個版本開始支持3D動態相冊(       )

A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

正確答案:D

2八、Android從哪一個版本開始系統自帶支持mobileAP熱點(        )

A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

正確答案:E

2九、Android從哪一個版本開始支持Flash10.1(       )

A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

正確答案:E

 

30、Android從哪一個版本開始系統自帶支持AllShare協議(        )

A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

正確答案:E

3一、Android從哪一個版本開始能夠提供多個不一樣帳戶統一收件箱

A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

正確答案:C

3二、Android從哪一個版本開始瀏覽器支持雙擊縮放

A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

正確答案:C

3三、Android從哪一個版本開始強化了語音識別的搜索功能

A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

正確答案:C

3四、Android從哪一個版本開始加入微軟Exchange服務支持

A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

正確答案:C

3五、Android從哪一個版本開始支持雙擊上傳圖片至YouTube

A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

正確答案:C

3六、Android從哪一個版本開始支持谷歌地圖服務更新

A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

正確答案:C

3七、Android從哪一個版本開始支持全部文本輸入區應用語音識別

A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

正確答案:D

3八、Android從哪一個版本開始支持3D相片集

A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

正確答案:D

3九、Android從哪一個版本開始支持修復FM收音機

A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

正確答案:D

40、如下哪些是Android的優點(       )

A、開源的操做系統,代碼徹底開放,開放成本最低

B、 便捷的用戶體驗界面,操做簡單

C、 平臺技術先進,更好的支持互聯網業務

D、系統資源佔用少,系統速度快

正確答案:ABCD

4一、Android從哪一個版本開始軟件可安裝到存儲卡上

A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

正確答案:E

4二、Android從哪一個版本開始自動更新設備上已經安裝的應用程序

A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

正確答案:E

 

4三、Android能實現手機的主屏幕的自定義,並將經常使用的各類應用以圖標的形式添加至主屏幕界面

A、對

B、錯

正確答案:A

4四、Android能實現手機的主屏幕的自定義,可是添加的圖標要按照功能屬性排列

A、對

B、錯

正確答案:B

4五、Android操做系統的主屏界面圖標設置一次後,就不能更改

A、對

B、錯

正確答案:B

 

4六、、Android操做系統能夠將哪些類型不一樣內容,隨意添加至主屏幕

A、快捷鍵

B、窗口小部件

C、文件夾

D、壁紙

正確答案:ABCD

相關文章
相關標籤/搜索