面試題一:AIDL的全稱是什麼?如何工做?java
Android interface definition language (android接口定義語言) ,linux
用來跨進程的訪問方法, 像 遊戲中調用支付寶接口就是用的這個。android
訪問遠程的服務的方法. 如何工做。c++
面試題二:Android程序運行時權限與文件系統權限的區別?面試
程序運行時權限:Android程序執行須要讀取到安全敏感項必需在androidmanifest.xml中聲明相關權限請求,打電話,訪問網絡,獲取座標,寫sd卡,讀寫聯繫人等..安裝的時候會提示用戶。算法
文件系統權限:其實就是Linux的文件系統權限,好比-rw------ 私有權限 -rw-rw-rw- 全局可讀可寫,(777是可讀可寫可執行1+2+4)還有sharedpreference裏面的Context.Mode_private數據庫
Context.Mode.world_read_able Context.Mode_world_writeable夜市文件系統的權限。瀏覽器
面試題三:系統上安裝了多種瀏覽器,可否指定某瀏覽器訪問指定頁面?緩存
找到對應的瀏覽器的意圖,傳遞數據URI , 激活這個意圖安全
Intent .setAction(VIEW)
Intent intent = new Intent();
// com.android.browser/.BrowserActivity
intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
Intent.setdata(uri);
像騰訊那個檢測是否安裝本身的瀏覽器,方法是queryintentactivity(),獲取到全部Action。而後查裏面有沒有本身瀏覽器的action,沒有的話就提示用戶。
面試題四:對主線程的理解:
耗時的不能再主線程作,會anr異常,像安卓四大組件都是在主線程裏面。
面試題五:Framework工做方式及原理,Activity是如何生成一個view的,機制是什麼?
全部的框架都是基於反射 和 配置文件(manifest)的。
Activity建立一個view是經過 ondraw 畫出來的, 畫這個view以前呢,還會調用onmeasure方法來計算顯示的大小.可是Surfaceview 是直接操做硬件的,由於 或者視頻播放對幀數有要求,onDraw效率過低,不夠使,Surfaceview直接把數據寫到顯存。
面試題六:android自己的一些限制,好比apk包大小限制,讀取大文件時的時間限?
若是在broadCast裏面不能超過10秒,
在service裏面不能超過20秒
在主線程裏面不能超過5秒。
像有些系統不能安裝大文件,咱們通常是把素材文件放到一個素材包而不是安裝包,二者區分開。
面試題七:如何加載的音樂信息,如何改善其效率?
Android提供mediascanner,mediaStore等接口, 音樂文件的信息都會存放到系統的數據庫表中,能夠經過content provider獲取,
顯示出來,改善效率,是個常見問題, 能夠從如下幾個方面做答,
1.分批加載數據, 延時加載數據, 合理使用緩存等...
2.預先加載一些 都會的使用的大的class的字節碼, 提早加載.
3.時間換時間
4.空間換時間
面試題八:ListView如何提升其效率?
1.異步加載數據, 分頁加載數據,使用 onscallLinster();
2.Static class ViewHolder
3. 使用靜態的view對象 避免建立過多的view.
4. 把下載後的數據緩存到數據庫裏
5. 客戶端和服務器 協同 做戰,好比說客戶端請求圖片的時候,先把本身的圖片數據和服務器比對一下,若是服務器圖片未更新,就拿緩存。看客戶端圖片的If-modify-since :屬性就只掉最後修改時間,在網易新聞客戶端就用到了這個。
面試題九:啓動一個程序,能夠主界面點擊圖標進入,也能夠從一個程序中跳轉過去,兩者有什麼區別?
若是在點擊圖標進入,就會開啓一個新的任務棧,若是startActivity的話默認狀況不會開啓一個新的任務棧。只有咱們在activity制定Flag-- flag_activity_new_task纔會開新的。
面試題十:Android程序與Java程序的區別?
1. Android程序用android sdk開發,java程序用javasdk開發.
2. Android SDK引用了大部分的Java SDK,少數部分被Android SDK拋棄,好比說界面部分,java.awt swing package除了java.awt.font被引用外,其餘都被拋棄,在Android平臺開發中不能使用。
3. android sdk 添加工具jar httpclient , pull openGL
4. 1.6的 不支持 httpUrlconning 獲取 last-modified 信息的處理
5. simpleDataFormat 在java中年時小寫,在安卓裏面是大寫。
面試題十一:在Android中,怎麼節省內存的使用,怎麼主動回收內存?:
<!--[if !supportLists]-->1. <!--[endif]-->儘可能多使用內部類 提升程序效率
<!--[if !supportLists]-->2. <!--[endif]-->把bean裏面的字段都定義成public :Bean private public
<!--[if !supportLists]-->3. <!--[endif]-->回收已經使用的資源
<!--[if !supportLists]-->4. <!--[endif]-->合理的使用緩存
<!--[if !supportLists]-->5. <!--[endif]-->合理設置變量的做用範圍 好比不是全局使用就不要定義爲application對象
<!--[if !supportLists]-->6. <!--[endif]-->將來的某一段時間執行 System.gc();
面試題十二:不一樣工程中的方法是否能夠相互調用?
能夠,aidl就是這樣子的。支付寶服務。
面試題十三:dvm的進程和Linux的進程, 應用程序的進程是否爲同一個概念?
Dvm的進程是dalivk虛擬機進程,每一個android程序都運行在本身的進程裏面,
每一個android程序系統都會給他分配一個單獨的liunx uid(user id),
每一個dvm都是linux裏面的一個進程.因此說這兩個進程是一個進程.
面試題十四:如何判斷是否有SD卡?
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
面試題十五:嵌入式操做系統內存管理有哪幾種, 各有何特性。?
這是大學裏面操做系統的知識,包括純分頁,純分段和段頁式存儲。
面試題十六:什麼是嵌入式實時操做系統, Android 操做系統屬於實時操做系統嗎?
實時操做系統分爲兩種,硬實時和 軟實時,硬實時通常用在軍工,好比火星探測器,航空啊等等,是一旦又中斷產生就會當即響應中斷,而軟實時是基於一套算法,能夠不當即響應中斷,咱們通常的操做系統都是軟實時操做系統,Android也不例外。
面試題十七:Linux中跨進程通訊的幾種方式?
管道( pipe ),信號量( semophore ),信號 ( sinal ),共享內存( shared memory ),套接字( socket )。
面試題十八:談談對Android NDK的理解:
1.實時性要求高的軟件。好比遊戲,圖形渲染, opencv (人臉識別)
2.調用C或者c+++的代碼庫,第一是性能好,第二是人家寫好了直接能用了,而java的代碼庫太少了。ffmpeg , rmvb mp5 avi 高清解碼. ffmpeg, opencore
3.優勢:效率高,缺點:出錯以後很差調試,寫起來也麻煩。軟件升級的時候也不方便。
面試題十九:Android UI中的View如何刷新。
分主線程和子線程中兩種狀況:‘
主線程用控件調用Invalide()方法。iv.invalidate();
子線程用控件調用postInvalidate();---iv.postInvalidate();