Android面試精華

來源:互聯網
上載者:User

標籤:依據   view   架構   簡訊   啟用   記憶體管理   機制   多媒體   恢複   

SIM卡的EF檔案有什麼作用?

SIM卡裡的全部檔案按樹來組織:
主檔案MF(Master File)——主檔案僅僅有檔案頭,裡面存放著整個SIM卡的控制和管理資訊
專用檔案DF(Dedicated File)——也是僅僅有一個檔案頭, 裡面存放著整個檔案夾的管理控制資訊, 專用檔案相當於一個檔案夾的根.
基本檔案EF(Elementary File)——既有檔案頭,也有檔案體, 檔案頭存放該檔案的位置和控制資訊, 檔案體存放真正的資料, 整個SIM卡中僅僅有基本檔案有檔案體, 也僅僅有基本檔案才用來存放資料.
一條簡訊最長約佔多少byte?中文70(包含標點),英文160個位元組
handler機制的原理?

andriod提供了 Handler 和 Looper 來滿足線程間的通訊。Handler 先進先出原則。

Looper類用來管理特定線程內對象之間的訊息交換(Message Exchange)。
  1)Looper: 一個線程能夠產生一個Looper對象,由它來管理此線程裡的Message Queue(訊息佇列)
  2)Handler: 你能夠構造Handler對象來與Looper溝通,以便push新訊息到Message Queue裡;或者接收Looper從Message Queue取出)所送來的訊息。


  3) Message Queue(訊息佇列):用來存放線程放入的訊息。
  4)線程:UI thread 通常就是main thread,而Android啟動程式時會替它建立一個Message Queue。
mvc模式的原理,在android中的應用?目的:減少耦合性,使組件反覆利用mvc是model,view,controller的縮寫,mvc包括三個部分:
  模型(model)對象:是應用程式的主體部分。全部的商務邏輯都應該寫在該層。


  視圖(view)對象:是應用程式中負責產生使用者介面的部分。也是在整個mvc架構中使用者唯一能夠看到的一層。接收使用者的輸入,顯示處理結果。
  控制器(control)對象:是依據使用者的輸入,控制使用者介面資料顯示及更新model對象狀態的部分。控制器更重要的一種導航功能,想用使用者出發的相關事件,交給m哦得了處理。在android中mvc的詳細體現例如以下:
   1)視圖層(view):一般採用xml檔案進行介面的描寫敘述,使用的時候能夠很方便的引入。當然,怎樣你對android瞭解的比較的多了話,就一定 能夠想到在android中也能夠使用javascript+html等的方式作為view層,當然這裡須要進行java和javascript之間的通 信,幸運的是。android提供了它們之間很方便的通訊實現。
  2)控制層(controller):android的控制層的重 任通常落在了眾多的acitvity的肩上。這句話也就暗含了不要在acitivity中寫代碼,要通過activity交割model商務邏輯層處理, 這樣做的另外一個原因是android中的acitivity的回應時間是5s,假設耗時的操作放在這裡。程式就非常easy被回收掉。
  3)模型層(model):對資料庫的操作、對網路等的操作都應該在model裡面處理,當然對業務計算等操作也是必須放在的該層的。
怎樣讓Activity變成一個表單?

在AndroidManifest.xml 中定義 Activity的屬性:android :theme="@android:style/Theme.Dialog"
背景Activity被系統回收怎麼辦?當你的程式中某一個Activity A 在執行時中。主動或被動地執行還有一個新的Activity B 這個時候A會執行

public void onSaveInstanceState(Bundle outState) {    super.onSaveInstanceState(outState);    outState.putLong("id", 123456);}
B 完畢以後又會來找A, 這個時候就有兩種情況,一種是A被回收,一種是沒有被回收。被回收的A就要又一次調用onCreate()方法,不同於直接啟動的是這回onCreate()裡是帶上參數savedInstanceState,沒被收回的就還是onResume就好了.
if(savedInstanceState != null){     long id = savedInstanceState.getLong("id");}

Intent的作用
怎樣退出Activity?怎樣安全退出已調用多個Activity的Application?對於單一Activity的應用來說,退出非常easy,直接finish()就可以。


當然,也能夠用killProcess()和System.exit()這個方案。

Android的資料存放區方式1、使用SharedPreferences儲存資料。
2、檔案儲存體資料。
3、SQLite資料庫儲存資料;
4、使用ContentProvider儲存資料;
5、網路儲存資料;
Android經常使用的布局線性/相對/絕對/網格/表格/幀布局
Android的多螢幕適配a.在manifest裡定義你的程式支援的螢幕類型,對應代碼例如以下:
<supports-screens android:resizeable=["true"| "false"]
android:smallScreens=["true" | "false"] //是否支援小屏
android:normalScreens=["true" | "false"] //是否支援中屏
android:largeScreens=["true" | "false"] //是否支援大屏
android:xlargeScreens=["true" | "false"] //是否支援超大屏
android:anyDensity=["true" | "false"] //是否支援多種不同密度的螢幕
android:requiresSmallestWidthDp=”integer”
android:compatibleWidthLimitDp=”integer”
android:largestWidthLimitDp=”integer”/>

b.對不同大小的螢幕提供不同的layout。
比方。假設須要對大小為large的螢幕提供支援。須要在res檔案夾下建立一個檔案夾layout-large/並提供layout。當然。也能夠在res檔案夾下建立layout-port和layout-land兩個檔案夾,裡面分別放置豎屏和橫屏兩種布局檔案。以適應對橫屏豎屏自己主動切換。



c.對不同密度的螢幕提供不同的圖片。
應盡量使用點9格式的圖片,如需對密度為low的螢幕提供合適的圖片,需建立目錄drawable-ldpi/。並放入合適大小的圖片。相應的,medium相應drawable-mdpi /,high相應drawable-hdpi/,extra high相應drawable-xhdpi/。
圖片大小的確定:low:medium:high:extra high比例為3:4:6:8。

舉例來說。對於中等密度(medium)的螢幕你的圖片像素大小為48×48,那麼低密度(low)螢幕的圖片大小應為36×36。高(high)的為72×72,extra high為96×96。
ContentProvider是怎樣實現資料共用的?一個程式能夠通過實現一個Content provider的抽象介面將自己的資料全然暴露出去,並且Content providers是以類似資料庫中表的方式將資料暴露。Content providers儲存和檢索資料,通過它能夠讓全部的應用程式訪問到。這也是應用程式之間唯一共用資料的方法。


要想使應用程式的資料公開化,可通過2種方法:建立一個屬於你自己的Content provider或者將你的資料加入到一個已經存在的Content provider中,前提是有同樣資料類型而且有寫入Content provider的許可權。


注冊廣播有幾種方式?有何優缺點?靜態注冊:常駐型,佔資源比較大動態注冊:優先順序比較高,廣播尾隨程式的生命週期
有哪些方法能夠實現前背景資料交換,包含文字和圖片?


有哪些方法實現訊息的推送?

輪詢 : 應用程式應當階段性的與server進行串連並查詢是否有新的訊息到達。你必須自己實現與server之間的通訊SMS :(通過傳送簡訊並解析簡訊內容來擷取server端的指令),這個出現的問題是非常難找到免費的網關來傳送簡訊持久串連 : 主要是Socket通訊,這個攻克了效能問題。可是耗電問題依然沒能解決
網路通訊的方式
TCP/URL(URLConnection)/HTTP(HttpClient)/WebView/WebService
Activity啟動模式1. standard
模式啟動模式。每次啟用Activity時都會建立Activity,並放入任務棧中。

2. singleTop
假設在任務的棧頂正好存在該Activity的執行個體, 就重用該執行個體,否者就會建立新的執行個體並放入棧頂(即使棧中已經存在該Activity實例。僅僅要不在棧頂。都會建立執行個體)。

3. singleTask
假設在棧中已經有該Activity的執行個體,就重用該執行個體(會調用執行個體的onNewIntent())。重用時,會讓該執行個體回到棧頂,因此在它上面的執行個體將會被移除棧。

假設棧中不存在該執行個體,將會建立新的執行個體放入棧中。

4. singleInstance
在一個新棧中建立該Activity執行個體,並讓多個應用共用改棧中的該Activity執行個體。

一旦改模式的Activity的執行個體存在於某個棧中。任何應用再啟用改Activity時都會重用該棧中的執行個體,其效果相當於多個應用程式共用一個應用,無論誰啟用該Activity都會進入同一個應用中。
NDK是什麼
NDK是一些列工具的集合,
NDK提供了一系列的工具,協助開發人員迅速的開發C/C++的動態庫。並能自己主動將so和java 應用打成apk包。


NDK整合了交叉編譯器,並提供了對應的mk檔案和隔離cpu、平台等的差異。開發人員僅僅需簡單的改動mk檔案就能夠建立出so
描寫敘述一下android的系統架構
android系統架構分從下往上為linux 核心層、執行庫、應用程式架構層、和應用程式層
linuxkernel:負責硬體的驅動程式、網路、電源、系統安全以及記憶體管理等功能。

  libraries和 androidruntime:libraries:即c/c++函數庫部分,大多數都是開放源碼的函數庫。比如webkit,該函數庫負責 android網頁瀏覽器的執行,比如標準的c函數庫libc、openssl、sqlite等,當然也包含支援遊戲開發2dsgl和 3dopengles,在多媒體方面有mediaframework架構來支援各種影音和圖形檔案的播放與顯示,比如mpeg4、h.264、mp3、 aac、amr、jpg和png等眾多的多媒體檔案格式。android的runtime負責解釋和執行產生的dalvik格式的位元組碼。

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



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

談談Android的IPC機制
IPC是內部進程通訊的簡稱, 是共用"具名管道"的資源。Android中的IPC機制是為了讓Activity和Service之間能夠隨時的進行互動,故在Android中該機制。僅僅適用於Activity和Service之間的通訊。類似於遠程方法調用。類似於C/S模式的訪問。通過定義AIDL介面檔案來定義IPC介面。Servier端實現IPC介面,Client端調用IPC介面本地代理。

java中怎樣引用本地語言?
能夠用JNI介面

DDMS和TraceView的差別?
DDMS是一個程式運行查看器。在裡面能夠看見線程和堆棧等資訊,TraceView是程式效能分析器

android中的動畫有哪幾類。它們的特點和差別是什麼?
  兩種,一種是Tween動畫、另一種是Frame動畫。Tween動畫,這樣的實現方式能夠使視圖組件移動、放大、縮小以及產生透明度的變化;另一種Frame動畫,傳統的動畫方法,通過順序的播放排列好的圖片來實現,類似電影。


 Android dvm的進程和Linux的進程, 應用程式的進程是否為同一個概念
  DVM指dalivk的虛擬機器。每個Android應用程式都在它自己的進程中執行,都擁有一個獨立的Dalvik虛擬機器執行個體。而每個DVM都是在Linux 中的一個進程,所以說能夠覺得是同一個概念。

嵌入式作業系統記憶體管理有哪幾種, 各有何特性

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

什麼是嵌入式即時作業系統, Android 作業系統屬於即時作業系統嗎?


  嵌入式即時作業系統是指當外界事件或資料產生時,可以接受並以足夠快的速度予以處理,其處理的結果又能在規定的時間之內來控制生產過程或對處理系統作出高速響應。並控制全部即時任務協調一致執行的嵌入式作業系統。主要用於工業控制、 軍事裝置、 航空航天等領域對系統的回應時間有苛刻的要求,這就須要使用即時系統。又可分為軟即時和硬即時兩種。而android是基於linux核心的。因此屬於軟即時。



Activity的生命週期
  和其它手機 平台 的應用 程式 一樣,Android的應用程式 的生命週期是被統一掌控 的。也就是說我們寫的應用程式命運掌握在別人(系統)的手裡,我們不能改變它,僅僅能學習 並適應它。簡單地說一下為什麼是這樣:我們手機在執行 一個應用程式的時候,有可能打進來電話發進來簡訊 。或者沒有電了,這時候程式都會被中斷,優先去服務電話的準系統 。另外系統也不同意你佔用太多資源 。至少要保證電話功能吧,所以資源不足的時候也就有可能被幹掉。
     在一個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()來推斷它,假設你有一個Progress Dialog線上程中轉動。請在onDestroy裡把他cancel掉,不然等線程結束的時候。調用Dialog的cancel方法會拋異常的。

  onPause,onstop, onDestroy。三種狀態 下 activity都有可能被系統幹掉為了保證程式的正確性,你要在onPause()裡寫上持久層操作的代碼。將使用者編輯的內容都儲存到儲存介質上(一般都是資料庫 )。實際工作中由於生命週期的變化而帶來的問題也非常多,比方你的應用程式起了新的線程在跑。這時候中斷了,你還要去維護那個線程,是暫停還是殺掉還是資料 復原。是吧?由於Activity可能被殺掉,所以線程中使用的變數和一些介面元素就千萬要注意了,一般都是採用Android的訊息機制 [Handler,Message]來處理多線程和介面互動的問題。



Android面試精華

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.