Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android工程師面試准備知識點

Android工程師面試准備知識點

編輯:關於Android編程

Android工程師面試准備知識點 聽+7哥說,把下面的全弄懂,面試必過,所以我就試著去把所有題目補充了一下,各位能耐的網友們,如果有吐槽或者補充的盡管給我留言,在這裡謝過大家了。   1.   android的多線程如何通信 答:Android提供了Handler和Looper來滿足線程間的通信。 Handler是消息的處理者,可以發布或者處理或者操作一個Runnable, handler接受消息後調用handleMessage進行處理。 Looper是Handler與消息隊列之間通訊橋梁,程序組件通過Handler把消息傳遞給Looper,Looper把消息放入隊列。   2.   android的多進程通信原理 答:Android實現跨進程通信的方式是采用的是AIDL方式 AIDL(Android 接口描述語言)是一種接口口描述語言; 編譯器可以通過aidl 文件生成一段代碼,通過預先定義的接口達到兩個進程內部通信進程的目的.  如果需要在一個Activity 中, 訪問另一個Service 中的某個對象, 需要先將對象轉化成AIDL 可識別的參數(可能是多個參數), 然後使用AIDL 來傳遞這些參 數, 在消息的接收端, 使用這些參數組裝成自己需要的對象. 原理:進程之間的通信信息,首先會被轉換成AIDL協議消息,然後發送給對方,對方收到AIDL協議消息後再轉換成相應的對象。由於進程之間的通信信息需要雙向轉換,所以android采用代理類在背後實現了信息的雙向轉換,代理類由android編譯器生成,對開發人員來說是透明的。   3.   Android五大組件 怎麼使用 答:Activity、Intent、Service、Content Provider,Broadcast Receiver Activity:字面意思為“活動”,簡單來說就是一個屏幕,通過調用setContentView()來設置要顯示的界面。 Intent:表示“意圖”,可以實現Activity與Activity之間的交互,傳遞數據。 Service:表示服務,與Activity一樣默認運行於主線程,但是它沒有可視化界面,是運行在後台。通過調用startService或bindService方法來啟動來啟動服務。 Content Provider:為解決應用程序間數據通信、共享的問題而引入的。 Broadcast Receiver: 廣播接收器,Android的廣播要麼來自系統,要麼來自普通程序。 可以在AndroidMenifest.xml注冊廣播接收器或在代碼中注冊。   4.   service啟動默認是什麼線程 答:默認啟動的是主線程 5.  使用過哪些設計模式進行開發 答:單例模式、工廠模式、觀察者模式 6.   線程池有什麼優點缺點 答:優點就是減少創建線程的消耗,每次創建線程都從線程池中拿。 缺點是一直占用內存。 7. 多種布局方式的特點,怎麼使用 答: 線性布局-LinearLayout orientation-容器內元素的排列方式。 vertical:子元素們垂直排列 horizontal:子元素水平排列 這是用得最多的一種布局,通過設置orientation來決定子元素是按照什麼方式排列。 絕對布局-AboluteLayout layout_x:x坐標。以左上角為頂點。 layout_y:y坐標。以做上角為頂點。 這個布局被摒棄了,不夠靈活 相對布局-RelativeLayout layout_centerInParent – 將當前元素放置到其容器內的水平方向和垂直方向的中央位置(類似的屬性有:layout_centerHorizontal,layout_alignParentLeft等) layout_marginLeft – 設置當前元素相對於其容器的左側邊緣的距離 layout_below – 放置當前元素到指定的元素的下面 layout_alignRight – 當前元素與指定的元素右對齊 這個布局也是經常用的,一般想要復雜的布局,它少不了,因為它可以很好的定位。 表格布局-TableLayout 表格布局主要以行列的方式來管理子控件,其中每一行即一個TableRow對象,每個TableRow對象可以添加子控件,並且每假如一個控件即相當於添加了一列。 幀布局-FrameLayout 也叫層疊布局。以左上角為起點,將FrameLayout內的元素一層覆蓋一層地顯示,在幀布局中,先添加的圖片被後添加的圖片覆蓋。   8.android的數據庫使用是否熟悉 答:SQLite是Android內嵌的一個輕量級數據庫,說實在我用得並不多,不太熟悉。   9.android的xml解析有哪些 有什麼區別 答:在Android平台上可以使用SAX(Simple API for XML)、Document Object Model(DOM)和Android附帶的Pull解析器解析XML文件。 DOM解析:處理大型文件時其性能下降的非常厲害。這個問題是由DOM的樹結構所造成的,這種結構占用的內存較多,而且DOM必須在解析文件之前把整個文檔裝入內存,適合對XML的隨機訪問 解析過程: 1.      獲取factory DocumentBuilderFactory  builderFactory =DocumentBuilderFactory.newInstance(); 2.      獲取builder builder =builderFactory.newDocumentBuilder(); 3.      解析為Document對象 Document document  = builder.parse(xmlFile); 4.      獲取根元素 Element root = document.getDocumentElement(); 5.      獲取根元素下的子節點 NodeList childNodes =root.getChildNodes(); SAX解析:不像DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個文件。當遇到像文件開頭,文檔結束,或者標簽開頭與標簽結束時,它會觸發一個事件,用戶通過在其回調事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問。 1.      獲取factory SAXParserFactory factory =SAXParserFactory.newInstance(); 2.      獲取Parser SAXParser parser =factory.newSAXParser(); 3.      開始解析 parser.parser(xmlFile, newMySAXListener()); PULL解析: 除了可以使用 SAX和DOM解析XML文件,大家也可以使用Android內置的Pull解析器解析XML文件。 Pull解析器的運行方式與 SAX 解析器相似。它提供了類似的事件,如:開始元素和結束元素事件,使用parser.next()可以進入下一個元素並觸發相應事件。事件將作為數值代碼被發送,因此可以使用一個switch對感興趣的事件進行處理。當元素開始解析時,調用parser.nextText()方法可以獲取下一個Text類型元素的值。 1.      獲取parser XmlPullParserparser = Xml.newPullParser(); 2.      設置輸入 parser.setInput(instream, “UTF-8”); 3.      獲取事件類型 int eventType = parser.getEventType(); 4.      開始解析     10.android的基礎類庫有哪些 例如 List 、Set、 HashSet有什麼區別,如何排除重復的數據 答: android.app :提供高層的程序模型、提供基本的運行環境 android.content :包含各種的對設備上的數據進行訪問和發布的類 android.database :通過內容提供者浏覽和操作數據庫 android.graphics :底層的圖形庫,包含畫布,顏色過濾,點,矩形,可以將他們直接繪制到屏幕上. android.location :定位和相關服務的類 android.media :提供一些類管理多種音頻、視頻的媒體接口 android.net :提供幫助網絡訪問的類,超過通常的 java.net.* 接口 android.os :提供了系統服務、消息傳輸、 IPC 機制 android.opengl :提供 OpenGL 的工具 android.provider :提供類訪問 Android 的內容提供者 android.telephony :提供與撥打電話相關的 API 交互 android.view :提供基礎的用戶界面接口框架 android.util :涉及工具性的方法,例如時間日期的操作 android.webkit :默認浏覽器操作接口 android.widget :包含各種 UI 元素(大部分是可見的)在應用程序的屏幕中使用     List按對象進入的順序保存對象,不做排序或編輯操作。Set對每個對象只接受一次,並使用自己內部的排序方法(通常,你只關心某個元素是否屬於Set,而不關心它的順序--否則應該使用List)。 具體查看http://blog.csdn.net/wwj_748/article/details/7883988   11.做過什麼東西,介紹一下。 答:我做過一個新聞客戶端,還有一個音樂播放器,實習正在做的是一個語音郵箱客戶端,正在開發當中的一個新浪微博客戶端。 1.      新聞客戶端是我在大學參加軟件開發大賽的一個作品,它是一款手機應用,用來顯示新聞信息,可供用戶查看和評論新聞。 2.      簡、美音樂播放器是我自主研發的一個音樂播放器,本著想做一款簡單、漂亮的音樂播放器給自己用。 3.      語言郵箱是我自己在實習公司參與開發的一款產品,是我們公司的一款產品。 4.      新浪微博客戶端是我的一個進階項目,想熟悉新浪微博開發平台API的使用,為自己開發其他開放平台做一個鋪墊,現在還在開發當中。     12.觸屏處理流程 答:事件傳遞順序為ViewGroup::onInterceptTouchEvent()–>ViewGroup或View的onTouchEvent() –> Activity::onTouchEvent() 1.      當ViewGroup::onInterceptTouchEvent()返回值為false,事件(按下、移動、抬起等)都傳遞給目標View。如果在ViewGroup觸發,就調用ViewGroup::OnTouchEvent(),如果在View觸發,則調用View::OnTouchEvent(); 2.      當ViewGroup::onInterceptTouchEvent()返回值為true,事件會直接傳遞到ViewGroup::onTouchEvent()處理。也就是說,事件後面的移動、抬起動作不會經過onInterceptTouchEvent(),而是直接傳到onTouchEvent()。 3.      當ViewGroup::OnTouchEvent()/View::OnTouchEvent()返回值為true,表示按下動作事件被處理,意味著事件的移動、抬起等後續動作將會傳到此方法。如果是View處理的話,則ViewGroup::OnTouchEvent()將不會獲得該事件; 如果是ViewGroup處理,則Activity::OnTouchEvent()將不會活動該事件。 4.      當ViewGroup::OnTouchEvent()/View::OnTouchEvent返回值為false,表示不處理事件,系統將把事件傳遞給其父級處理。 5.      Activity::OnTouchEvent()這個是最後被處理的地方,如果不處理,系統將拋棄這個事件。   小結:onInterceptTouchEvent()是用來分發事件,OnTouchEvent()是用來處理事件的,誰不處理就交給上一級處理,層層傳遞。   13.activity流程 答:創建onCreate-  啟動onStart – 開始onResume – 暫停 onPause – 結束onStop – 銷毀onDestroy 在一個Activity正常啟動的過程中,他們被調用的順序是 onCreate ->onStart -> onResume, 在Activity被干掉的時候順序是onPause -> onStop -> onDestroy ,這樣就是一個完整的生命周期 詳細介紹一下這幾個方法中系統在做什麼以及我們應該做什麼:   onCreate: 在這裡創建界面 ,做一些數據 的初始化工作   onStart: 到這一步變成用戶可見不可交互 的   onResume: 變成和用戶可交互 的,(在activity 棧系統通過棧的方式管理這些個   Activity的最上面,運行完彈出棧,則回到上一個Activity)   onPause: 到這一步是可見但不可交互 的,系統會停止動畫 等消耗CPU 的事情   從上文的描述已經知道,應該在這裡保存你的一些數據,因為這個時候   你的程序的優先級降低,有可能被系統收回。在這裡保存的數據,應該在   onResume裡讀出來,注意:這個方法裡做的事情時間要短,因為下一   個activity不會等到這個方法完成才啟動   onstop: 變得不可見 ,被下一個activity覆蓋了   onDestroy: 這是activity被干掉前最後一個被調用方法了,可能是外面類調用finish方   法或者是系統為了節省空間將它暫時性的干掉,可以用isFinishing()來判   斷它,如果你有一個ProgressDialog在線程中轉動,請在onDestroy裡   把他cancel掉,不然等線程結束的時候,調用Dialog的cancel方法會拋   異常的。   onPause,onStop, onDestroy,三種狀態 下 activity都有可能被系統干掉 為了保證程序的正確性,你要在onPause()裡寫上持久層操作的代碼,將用戶編輯的內容都保存到存儲介質上(一般都是數據庫 )。實際工作中因為生命周期的變化而帶來的問題也很多,比如你的應用程序起了新的線程在跑,這時候中斷了,你還要去維護那個線程,是暫停還是殺掉還是數據回滾,是吧?因為Activity可能被殺掉,所以線程中使用的變量和一些界面元素就千萬要注意了,一般都是采用Android的消息機制 [Handler ,Message]來處理多線程和界面交互的問題。   14.如何提高程序的優先級,避免系統內存不足的時候被殺掉 答:為了提高我們的Activity中的線程的線程優先級(Thread-Priority),我們可以在AndroidManifest.xml使用uses-permission標簽。可以這麼做:   <uses-permissionid="android.permission.RAISED_THREAD_PRIORITY"/>   然後在Activity代碼中設置線程優先級 Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);//設置線程優先為後台,這樣當多個線程並發後很多無關緊要的線程分配的CPU時間將會減少,有利於主線程的處理,相關的Thread優先級定義羅列有以下幾種:   int THREAD_PRIORITY_AUDIO //標准音樂播放使用的線程優先級 int THREAD_PRIORITY_BACKGROUND //標准後台程序 int THREAD_PRIORITY_DEFAULT // 默認應用的優先級 int THREAD_PRIORITY_DISPLAY //標准顯示系統優先級,主要是改善UI的刷新 int THREAD_PRIORITY_FOREGROUND //標准前台線程優先級 int THREAD_PRIORITY_LESS_FAVORABLE //低於favorable int THREAD_PRIORITY_LOWEST //有效的線程最低的優先級 int THREAD_PRIORITY_MORE_FAVORABLE //高於favorable int THREAD_PRIORITY_URGENT_AUDIO //標准較重要音頻播放優先級 int THREAD_PRIORITY_URGENT_DISPLAY //標准較重要顯示優先級,對於輸入事件同樣適用。  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved