2013年4月19日--佳都新太Android筆試題+解答

 

佳都新太Android筆試題

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

答:創建 onCreate -  啓動onStart – 開始 onResume – 暫停 onPause – 結束 onStop – 銷燬onDestroy

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

答:onSaveInstanceState()
當你的程序中某一個Activity A在運行時,主動或被動地運行另一個新的Activity B,這個時候A會執行onSaveInstanceState()B完成以後又會來找A,這個時候就有兩種情況:一是A被回收,二是A沒有被回收,被回收的A就要重新調用onCreate()方法,不同於直接啓動的是這回onCreate()裏是帶上了參數savedInstanceState;而沒被收回的就直接執行onRestart()->onStart()->onResume(),跳過onCreate()了。

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

答:兩種方法:

l  AndroidManifest.xml設置當前Activity的一個主題屬性

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

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

l  通過修改Theme.Dialog主題的android:windowBackground屬性值可以改變Activity的背景圖像

style.xml下增加以下內容

<style name= “MyTheme” parent= “@android:style/Theme.Dialog>

<item name= “android:windowBackground”>@drawable/msg_background</item>

</style>

manifest.xml中直接指定Activitytheme就行了

<activity android:name= “.MainActivity” android:label= “@string/app_name” android:theme= “@style/MyTheme”>

<intent-filter>

     <action android:name= “android.intent.action.MAIN”/>

     <category android:name= “android.intent.category.LAUNCHER”/>

  </intent-filter>

</activity>

4.  按下返回鍵與Home鍵的區別。

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

5.  請介紹下Android中常用的幾種佈局。

答:

1 LinearLayout – 線性佈局。
orientation – 容器內元素的排列方式。vertical: 子元素們垂直排列;horizontal: 子元素們水平排列
gravity – 內容的排列形式。常用的有 top, bottom, left, right, center

2 AbsoluteLayout – 絕對佈局。
layout_x x 座標。以左上角爲頂點
layout_y y 座標。以左上角爲頂點

3 TableLayout – 表格式佈局
表格佈局主要以行列的形式來管理子控件,其中每一行即一個TableRow對象,每個TableRow對象可以添加子控件,並且每加入一個空間即相當於添加了一列

4 RelativeLayout – 相對佈局。
layout_centerInParent – 將當前元素放置到其容器內的水平方向和垂直方向的中央位置(類似的屬性有:layout_centerHorizontal, layout_alignParentLeft 等)
layout_marginLeft – 設置當前元素相對於其容器的左側邊緣的距離
layout_below – 放置當前元素到指定的元素的下面
layout_alignRight – 當前元素與指定的元素右對齊

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

 

6.  請介紹下Android的數據存儲方式,以及優缺點。

Ø  SharedPreferences方式

用來存儲”key-value paires”格式的數據,它是一個輕量級的鍵值存儲機制,只可以存儲基本數據類型,可以通過它保存一些上次用戶所做的修改操作

Ø  文件存儲方式

它通過FileInputStreamFileOutputStream對文件進行操作。但是在Android中,文件是一個應用程序私有的,一個應用程序無法讀寫其他應用程序的文件,如果要共享數據就用Content Providers

Ø  SQLite數據庫方式

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

Ø  內容提供器(Content provider)方式

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

Ø  網絡存儲方式

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

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

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

 

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

答:

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

2.第二種方式是通過調用Context.bindService()啓動,調用Context.unbindservice()結束,還可以通過ServiceConnection訪問Service
Service每一次的開啓關閉過程中,只有onStart可被多次調用(通過多次startService調用),其他onCreateonBindonUnbindonDestory在一個生命週期中只能被調用一次。

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

答:註冊廣播有兩種方式:

1、在應用程序的代碼中註冊 
註冊BroadcastReceiver 
registerReceiver
receiverfilter); 
取消註冊BroadcastReceiver 
unregisterReceiver
receiver); 
BroadcastReceiver更新UI,通常會使用這樣的方法註冊。啓動Activity時候註冊BroadcastReceiverActivity不可見時候,取消註冊。 
   2
、在androidmanifest.xml當中註冊 
<receiver> 
   <intent-filter> 
    <action android:name ="android.intent.action.PICK"/> 
   </intent-filter> 
</receiver> 
使用這樣的方法註冊弊端:它會始終處於活動狀態,畢竟是手機開發,cpu和電源資源比較少,一直處於活動耗費大,不利。 

引入廣播機制的用意:

a:引入廣播機制可以方便幾大組件的信息和數據交互。

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

c:效率上(參考UDP的廣播協議在局域網的方便性) d:設計模式上(反轉控制的一種應用,類似監聽者模式

10. Android如何進行進程間通信,怎麼實現?

答:Android提供了AIDL來實現進程間通信(IPC)AIDL全稱爲Android Interface Definition Language

簡歷裏AIDL服務的具體步驟如下:

1.    Eclipse Android工程中的Java源文件目錄中建立一個擴展名爲aidl的文件。該文件的語法類似於Java代碼,但會稍有不同。

2.    如果aidl文件的內容正確的話,ADT會自動生成一個Java接口文件(*.java).

3.    建立一個服務類(Service的子類)

4.    實現由aidl文件生成的Java接口。

5.    AndroidManifest.xml文件中配置AIDL服務,尤其要注意的是,<action>標籤中android:name的屬性值就是客戶端要引用該服務的ID,也就是Intent類構造方法的參數值。

 

11. Android提供給第三方調用的方式有哪幾種,優缺點分別是什麼?

答:第三方調用的方式?不理解是什麼!

12. 什麼是ANR,如何避免ANR?

答:

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

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

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

  Android應用程序完全運行在一個獨立的線程中(例如main)。這就意味着,任何在主線程中運行的,需要消耗大量時間的操作都會引發ANR。因爲此時,你的應用程序已經沒有機會去響應輸入事件和意向廣播(Intent broadcast)

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

13. 如果實現一個web app來調用本地的通訊錄功能?

答: 沒有使用web app來調用本地的通訊錄功能,不知道如何解答。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章