android面試題之五

二十六、什麼情況會導致Force Close ?如何避免?能否捕獲導致其的異常?

 

拋出運行時異常時就會導致Force Close,比如空指針、數組越界、類型轉換異常等等。

 

捕獲:可以通過logcat查看拋出異常的代碼出現的位置,然後到程序對應代碼中進行修改。

 

避免:編寫程序時,要思維縝密,在可能出現異常的地方都作相應的處理,增強程序的健壯性。

 

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

 

會。比如nullpointerException。我遇到過。比如空指針異常是最常見的異常,隻要對null調用方法就會出現nullpointerException。會導致程序無法正常運行出現forceclose。可以打開控制臺查看logcat信息,然後找到拋出異常信息的代碼段並進行修改。

 

 

二十八、Android dvm的進程和Linux的進程, 應用程序的進程是否為同一個概念

 

DVM指Dalvik虛擬機。每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。而每一個DVM都是在Linux 中的一個進程,所以說可以認為是同一個概念。

 

每一個Dalvik 應用作為一個獨立的Linux 進程執行可以防止在虛擬機崩潰的時候所有程序都被關閉。

 

至於DVM和JVM的區別上文已介紹過。

 

 

 

二十九、什麼是嵌入式實時操作系統, Android 操作系統屬於實時操作系統嗎?

 

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

 

特點:

 

●實時性。由於對嵌人式實時操作系統的共同要求是系統能快速響應事件,具有較強的實時性,所以嵌入式實時操作系統的內核都是可搶占的。

●可裁剪性。嵌入式操作系統運行的硬件平臺多種多樣,其宿主對象更是五花八門,所以要求嵌入式操作系統中提供的各個功能模塊可以讓用戶根據需要選擇使用,即要求它具有良好的可裁剪性。

●高可靠性。嵌入式系統廣泛應用於軍事武器、航空航天、交通運輸、重要的生產設各領域,所以要求嵌人式操作系統必須有極高的可靠性,對關鍵、要害的應用還要提供必要的容錯和防錯措施,以進一步提高系統的可靠性。

●易移植性。為瞭適應多種多樣的硬件平臺,嵌人式操作系統應可在不做大量修改的情況下能穩定地運行於不同的平臺。

 

 

 

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

 

(1)嵌入式操作系統內存管理機制:

 

1、虛擬內存管理機制:

    有一些嵌入式處理器提供瞭MMU,在MMU具備內存地址映射和尋址功能,它使操作系統的內存管理更加方便。如果存在MMU ,操作系統會使用它完成從虛擬地址到物理地址的轉換,所有的應用程序隻需要使用虛擬地址尋址數據。這種使用虛擬地址尋址整個系統的主存和輔存的方式在現代操作系統中被稱為虛擬內存。MMU 便是實現虛擬內存的必要條件。

    虛擬內存的管理方法使系統既可以運行體積比物理內存還要大的應用程序,也可以實現“按需調頁”策略,既滿足瞭程序的運行速度,又節約瞭物理內存空間。

    在L inux系統中,虛擬內存機制的實現實現為我們提供瞭一個典型的例子:在不同的體系結構下,使用瞭三級或者兩級頁式管理,利用MMU 完成從虛擬地址到物理地址之間的轉換。基於虛擬內存管理的內存最大好處是:由於不同進程有自己單獨的進程空間,十分有效的提高瞭系統可靠性和安全性。

2、非虛擬內存管理機制:

    在實時性要求比較高的情況下,很多嵌入式系統並不需要虛擬內存機制:因為虛擬內存機制會導致不確定性的 I/O阻塞時間,使得程序運行時間不可預期,這是實時嵌入式系統的致命缺陷;另外,從嵌入式處理器的成本考慮,大多采用不裝配MMU 的嵌入式微處理器。所以大多嵌入式系統采用的是實存儲器管理策略。因而對於內存的訪問是直接的,它對地址的訪問不需要經過MMU,而是直接送到地址線上輸出,所有程序中訪問的地址都是實際的物理地址;而且,大多數嵌入式操作系統對內存空間沒有保護,各個進程實際上共享一個運行空間。一個進程在執行前,系統必須為它分配足夠的連續地址空間,然後全部載入主存儲器的連續空間。

    由此可見,嵌入式系統的開發人員不得不參與系統的內存管理。從編譯內核開始,開發人員必須告訴系統這塊開發板到底擁有多少內存;在開發應用程序時,必須考慮內存的分配情況並關註應用程序需要運行空間的大小。另外,由於采用實存儲器管理策略,用戶程序同內核以及其它用戶程序在一個地址空間,程序開發時要保證不侵犯其它程序的地址空間,以使得程序不至於破壞系統的正常工作,或導致其它程序的運行異常;因而,嵌入式系統的開發人員對軟件中的一些內存操作要格外小心。

   UCOS就是使用非虛擬內存管理的一個例子,在UCOS中,所有的任務共享所有的物理內存,任務之間沒有內存保護機制,這樣能夠提高系統的相應時間,但是任務內存操作不當,會引起系統崩潰。

 

(2)嵌入式操作系統內存管理有頁式,段式,段頁,用到瞭MMU,虛擬空間等技術。

 

(3)段式存儲管理和頁式存儲管理的本質區別:

 

  1.頁式存儲管理中的邏輯地址有頁號和業內地址兩部分組成,但作業仍然使用連續的邏輯地址,可把它看作是一維的(線性的)地址結構。用戶沒有分頁的概念,操作系統把作業信息裝入主存時才按照塊長進行分頁。

  2.段式存儲管理中的邏輯地址有段號和段內地址兩部分組成。他支持用戶的分段,每段內的邏輯地址是連續的,而段與段之間的邏輯地址是不連續的。因此段式存儲管理中的邏輯地址實際上是采用瞭二維的地址結構。

發佈留言