Android 2017.7.11 面試總結

2017.7.11 面試總結

1. volley 的緩存和okhttp對比。

1.okhttp結合retrofit的http
2.okhttp結合retrofit 的線程池
3.interceptor 
4.okio來簡化數據的訪問和存儲。
5.鏈條委託機制

配置Okhttp的Cache
配置請求頭中的cache-control或者統一處理所有請求的請求頭
雲端配合設置響應頭或者自己寫攔截器修改響應頭中cache-control

volley的話:2.3以上使用的是HttpUrlconnnection 2.3以下使用的httpclient、下載文件不行。缺點是不支持同步,這點會限制開發模式

**爲什麼文件的下載不行?問題13** 

結合retrofit的時候:

  Interceptor :
             1可以設置Log攔截器,
             2緩存機制(有網/無網的緩存策略)
             3.公共參數 
             4.頭信息 
             5.超時重連,
*優化網絡的策略:*
    1.連接複用節省連接建立時間,如開啓keep-alive
    2.不用域名,用IP直連省去DNS解析過程,根據域名得到IP地址
    3.Gzip 減少體積 

2. ThreadPoolExecutor的線程 優點等

    1.降低資源
    2.提高響應速度
    3.提高線程的可管理型。
    設置隊列的長度,不燃會OOM,設置了隊列的長度,會有任務得不到處理,這裏構建阻塞線程池。

3. Intentservice的什麼時候銷燬

     不會銷燬。只有等unbind的時候纔會。

4. Bindservice能銷燬嗎,怎麼不讓他銷燬

    onStartCommand() 方法返回整型數來描述系統應該如何在服務終止的情況下繼續運行服務.
onStartCommand有三種返回值:
    START_STICKY:sticky的意思是“粘性的”。使用這個返回值時,我們啓動的服務跟應用程序"粘"在一起,如果在執行完onStartCommand後,服務被異常kill掉,系統會自動重啓該服務。當再次啓動服務時,傳入的第一個參數將爲null;
    START_NOT_STICKY:“非粘性的”。使用這個返回值時,如果在執行完onStartCommand後,服務被異常kill掉,系統不會自動重啓該服務。
    START_REDELIVER_INTENT:重傳Intent。使用這個返回值時,如果在執行完onStartCommand後,服務被異常kill掉,系統會自動重啓該服務,並將Intent的值傳入
*上面startService()和bindService()兩種模式是完全獨立的。你可以綁定一個已經通過startService()方法啓動的服務*。例如:一個後臺播放音樂服務可以通過startService(intend)對象來播放音樂。可能用戶在播放過程中要執行一些操作比如獲取歌曲的一些信息,此時activity可以通過調用bindServices()方法與Service建立連接。這種情況下,stopServices()方法實際上不會停止服務,直到最後一次綁定關閉

5. Glide,picasso的區別:

  1. jar大小。glide 440KB    , picasso。121KB
  2. Glide 就會非常智能的同 Activity和Fragment 的生命週期集成。
  3. 緩存策略:
    picasso: 只緩存完整的大小到本地。view大小改變,在原尺寸就行改變 resize。
    glide:需要緩存不同大小的尺寸同一張圖片,先下載,改變圖片大小,適應imageview的要求,然後緩存。
  4. 內存的使用:rgb-565,picasso。argb-8888,glide所佔內存比較小。Picasso 是緩存的 full size 圖片的大小,再去修改適配View大小,而 Glide 是加載已經改變大小後的圖片,顯而易見使用的memory會小很多
  5. 加載圖片的時間 
    下載的:Picasso 是直接把圖加載到內存中,而 Glide 則需要改變圖片大小再加載到內存
    緩存的:因爲Picasso 從緩存中拿到的圖片,還要先去 resize 後,然後設定給 imageView
  6. GIF 支持:Glide 支持 GI

6. A,B,C,D 怎麼返回B界面 問題10解決
7. 項目最近遇到的難點
8. saveInstance的保存位置,onrestoreinstance的位置

 都存儲在Bundle中,系統回收Activity調用了onDestroy(),但調用了onDestroy()並不表示出棧,返回棧中還有Activity的部分信息,返回鍵和finish()纔會導致出棧。系統回收Activity後,返回棧中還有該Activity的部分信息,所以按返回鍵還可以回到該Activity只是需要重新生成,此時Bundle對象還在。屏幕方向切換屬於這種情況

9. Okhttp緩存的位置。如何設置緩存。 interceptor能做什麼

 緩存在本地 自定義  參考第一

10. Flag: newtask. cleartop 的使用場景

    因爲standard模式的Activity默認會進入啓動它的Activity所屬的任務棧中,但是由於非Activity類型的context(ApplicationContext)並沒有所謂的任務棧,所以就出現問題了。需要指定Activity爲FLAG_ACTIVITY_NEW_TASK標記位,這樣啓動的時候,就會爲它創建一個新的任務棧了_

    clear_top : 解決問題6的答案,在D中直接Intent B ,addFlag(“…flag-activity-clear-top”), 爲了防止B銷燬重新創建,   加上intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);  即可

11. Ibeacon藍牙是怎麼調用的。

   基於Bluetooth Low Energy(BLE)低功耗藍牙傳輸技術,iBeacon基站不斷向四周發送藍牙信號,當智能設備進入設定區域時,就能夠收到信號。只要滿足iBeacon技術標準的都可以使用,所以Android也能夠支持iBeacon。

    藍牙推送信notification
    傳輸距離增大(超過100米—10釐米內)、安全和穩定性提高
    無需配對. 藍牙的廣播頻道
    程序可以後臺喚醒

    32位廣播數據格式:
    **Major:相當於羣組號  **
     **Minor:相當於識別羣組裏單個的Beacon**
    **TX Power:用於測量設備離Beacon的距離**
藍牙
    1.BluetoothAdapter
    2.附近信號強度的集合判斷
    3.根據32位廣播數據格式進行判斷,業務邏輯處理Notification信息, 以及界面信息替換。

*12. 廣播如何設置權限

receiver清單文件中創建permission
LocalBroadcastManager 來發送只在程序內部傳遞的廣播,從而提升廣播的性能

13. Volley爲什麼對於下載效率低?

Volley的request response 都是把數據放數據放在byte數組裏面,不支持輸入輸出流,把數據放在數組中。如果大文件多了,數組就會非常的大且多,消耗內存,沒有像返回stream具備可操作性,不可能把整don個文件緩存到內存中之後再緩存到文件裏面,

14. retrofit的中的總結:

Retrofit採用了 外觀模式 統一調用創建網絡請求接口實例和網絡請求參數配置的方法,具體細節是:
    •   動態創建網絡請求接口的實例(代理模式 - 動態代理)
    •   創建 serviceMethod 對象(建造者模式 & 單例模式(緩存機制))
    •   對 serviceMethod 對象進行網絡請求參數配置:通過解析網絡請求接口方法的參數、返回值和註解類型,從Retrofit對象中獲取對應的網絡請求的url地址、網絡請求執行器、網絡請求適配器 & 數據轉換器。(策略模式)
    •   對 serviceMethod 對象加入線程切換的操作,便於接收數據後通過Handler從子線程切換到主線程從而對返回數據結果進行處理(裝飾模式)
    •   最終創建並返回一個OkHttpCall類型的網絡請求對象

15. 加載大圖BItmapFactory的操作

BitmapFactory加載圖片的方式: decodeFile decodeStream decodeResource

<1> 獲取網絡圖片的尺寸參數:
     inJustDecodeBounds=true. 不加再到內存就可以獲得網絡圖片的寬高。
<2>  決策: 加載原尺寸還是壓縮完再加載。
     圖片壓縮,BitmapFactory.Options 的inSimpleSize=4的值壓縮4倍。
     根據傳入options、需要的寬高計算合適的inSimpleSize
<3> 之後再解析一次圖片,使用新獲取到的inSampleSize值,並把inJustDecodeBounds設置爲false,就可以得到壓縮後的圖片了
<4> 使用

內存緩衝技術 LRUcache。 過去使用軟引用、弱引用對象。Android2.3開始傾向回收這些。不可靠了。
緩存大小需要你去決定。太大OOM太小頻繁釋放加載。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章