在接下來的一段時間,我將收集一些常見面試題,綜合網上資料加自己測試與理解,將其總結出來和大家分享,裡面難免有一些問題,希望大家提出寶貴意見以便及時更正。
一、Activity、Service、BroadcastReceiver的作用
1. Activity是android四大組件中最基本的組件,是程序與用戶交互的窗口,代表一個用戶所能看到的屏幕,它具有自己的生命周期,由系統控制。它可以用來顯示控件、監聽系統事件(按鍵事件、觸摸屏事件等)、為保持各界面的狀態做很多持久化的事情。
2. 一個Service 是一段長生命周期的,沒有用戶界面的程序,可以用來開發如監控類程序等。比如音樂播放器就是啟動一個Service來保持音樂在後台的播放。所以,Service組件通常用於為其他組件提供後台服務或監控其他組件的運行狀態。
3. Broadcast(廣播)是一種廣泛運用的在應用程序之間傳輸信息的機制。BroadcastReceiver代表廣播接收器,是對發送出來的 Broadcast進行過濾接受並響應的一類組件。廣播接收器沒有用戶界面,然而,它們可以啟動一個activity或service 來響應它們收到的信息,或者用NotificationManager 來通知用戶。
二、顯式intent和隱式intent的區別是什麼
顯式Intent:對於明確指出了目標組件名稱的Intent,我們稱之為顯式Intent。
隱式Intent:對於沒有明確指出目標組件名稱的Intent,則稱之為隱式Intent。
顯式Intent直接用組件的名稱定義目標組件,這種方式很直接。但是由於開發人員往往並不清楚別的應用程序的組件名稱,因此,顯式Intent更多用於應用程序內部傳遞消息。比如在某應用程序內,一個Activity啟動一個Service。
隱式Intent恰恰相反,它不會用組件名稱定義需要激活的目標組件,它更廣泛地用於在不同應用程序之間傳遞消息。
另外,在顯式Intent消息中,決定目標組件的唯一要素就是組件名稱,一旦名稱確定,就不需要其他內容即可找到相應組件。 但在隱式Intent中需要借助過濾器IntentFilter 來尋找與之相匹配的組件。
三、怎麼將一個Activity封裝成對話框的樣子? 半透明的樣子?長按Menu菜單的樣子?
1. 封裝成對話框的樣子:給activity加上如下屬性
android :theme="@android:style/Theme.Dialog"
2.封裝成半透明的樣子:給activity加上如下屬性
android:theme="@android:style/Theme.Translucent"
3.封裝成長按菜單的樣子:
重寫onKeyDown()和onKeyLongPress()方法,在onKeyDown中對menu鍵調用event.startTracking()方法跟蹤,這樣長按Menu鍵會回調onKeyLongPress()方法,在裡面彈出對話框式的activity即可。
四、介紹一下Android系統的體系結構
從上至下包括應用層(Applications)、應用框架層(Application Framework)、系統運行庫層(Libraries and Android Runtime)和Linux內核層(Linux Kernel)。
1.應用層包含開發者自己開發的一些應用和Google已經綁定的一些核心應用。比如Email客戶端、浏覽器、聯系人、日歷等等。
2. 應用框架層就是應用開發者所必須了解API。該層提供了很多組件和管理器,比如活動管理器(Activity Manager)、窗口管理器(Window Manager)、內容提供器(Content Providers)、視圖系統(View System)、包管理器(Package Manager)等等,那麼開發者基於該層進行開發,就容易多了。
3. 系統運行庫層是一些底層C/C++庫,主要包括Bionic系統C庫(C語言標准庫,系統最底層的庫)、多媒體庫(Media Framework)、SGL(2D圖形引擎庫)、SSL(位於TCP/IP協議與各種應用層協議之間,提供數據通信支持)、OpenGL ES 1.0(3D效果支持)、SQLite(關系數據庫)、Webkit(Web浏覽器引擎)、FreeType(位圖bitmap及矢量圖vector)。
4. Linux內核主要是作為硬件和軟件棧之間的抽象層,內核層提供如下一些驅動:顯示驅動(Display Driver)、鍵盤驅動(Keyboard Driver)、Flash內存驅動(Flash Memory Driver)、照相機驅動(Camera Driver)、音頻驅動(Audio Driver)、藍牙驅動(Bluetooth Driver,基於IEEE 802.15.1)、WiFi驅動、Binder IPC驅動(Android的一個特殊驅動程序,具有單獨的設備節點,提供進程間通信)、Power Management(電源管理)。從軟件角度看,Linux內核就是“硬件”。
五、一條最長的短信息約占多少 byte?
英文:160字節。中文:70個漢字即140字節,還有20字節用來標識是中文短信。