筆者因爲在找工做,因此近期最主要的任務就是準備面試,不打無準備之仗。只有你準備充分了,那麼你想要的機會纔有機會入你懷中。html
筆者會將準備面試的學習過程記錄下來,方便本身覆盤的同時也但願能給一道找工做的小夥伴們一些幫助。筆者準備的內容大綱以下android
接下來開始本篇博客的正菜網絡
(1)經過AsyncTask能夠更加方便的執行後臺任務以及在主線程中訪問ui,可是並不合適執行特別耗時的後臺任務。併發
這個主要是由於在Android 3.0以後它的內部是串行執行任務的。串行執行任務效率就會比較低,雖然能夠經過調用AsyncTask的executeOnExecutor方法並行執行任務,可是在併發程度比較高的狀況下,很容易帶來併發錯誤,這也是Android 3.0以後將並行改爲串行的主要緣由。框架
(2)注意AsyncTask的內存泄露、生命週期問題異步
若是AsyncTask被聲明爲Activity的非靜態的內部類,那麼AsyncTask會保留一個對Activity的引用。若是Activity已經被銷燬,AsyncTask的後臺線程還在執行,它將續在內存裏保留這個引用,致使Activity沒法被內存回收,引發內存泄漏。函數
解決方法:oop
(1)將AsyncTask改成靜態內部類,也能夠在內部類AsyncTask裏面持有Activity的弱引用。佈局
(2)在Activity的onDestroy生命週期方法裏調用AsyncTask的cancel銷燬AsyncTask
在Activity中建立的AsyncTask會一直執行,直到doInBackground()方法執行完畢,因此咱們在銷燬Activity的時候也須要銷燬AsyncTask。經過在Activity的onDestroy生命週期方法裏調用AsyncTask的cancel銷燬AsyncTask
建議配合Android開發藝術探索(P392) 同時食用
Android的消息機制主要指Handler的運行機制以及Handler所附帶的MessageQueue和Looper的工做過程,這三者其實是一個總體。Handler的主要做用是將一個任務切換到某個指定的線程中去執行。
那Handler是怎麼工做的呢?
Handler主要包含消息的發送和接收。某線程藉助Handler發送一條消息,就會插入到MessageQueue這個消息隊列中,Looper不斷的輪詢這個消息隊列,若是輪詢到新的消息到來就會去取出並處理它,再交由Handler的dispatchMessage方法處理消息,dispatchMessage方法是在Handler所在的線程,因此於此同時,線程也就切換到了Handler所在的線程了。
MessageQueue的內部實現是一個隊列嗎?
不是,它用一個單鏈表來維護消息列表,由於MessageQueue須要不斷的插入和刪除數據,而單鏈表實現插入和刪除的效率高。
建議配合該博客同時食用 聊聊Android的消息機制
HandlerThread就是可使用Handler的Thread,它是一個串行隊列,有本身的內部Looper對象,背後只有一個線程。
它們都是用於對象序列化的接口,有的時候咱們須要把對象持久化到存儲設備或者經過網絡進行傳輸給其餘客戶端,這個時候就須要完成對象的持久化。經過這兩個接口咱們能夠序列化來完成對象的持久化。
Serializable是序列化的意思,表示將一個對象轉換成存儲或可傳輸的狀態。序列化後的對象能夠在網絡上進傳輸,也能夠存儲到本地。
使用Parcelable也能夠實現對象序列化果,不過不一樣於Serializable,Parcelable方式的實現原理是將一個完整的對象進行分解,而分解後的每一部分都是Intent所支持的數據類型,這也就實現傳遞對象的功能。
總結
Serializable須要大量的I/O操做,雖然使用時操做方便可是開銷很大。Parcelable使用起來稍微麻煩點,但它的效率高,它是Android推薦的序列化方式,首選Parcelable。
建議配合Android開發藝術探索(P47) 同時食用
有DOM、SAX、PULL三種解析方式
建議配合該博客同時食用 Android中解析XML格式數據的方法