Android面試整理

  1. RecyclerView的上拉加載、下拉刷新怎麼實現?RecyclerView原生實現側滑、拖動?
  • 上拉加載、下拉刷新
    總結:上拉加載更多功能實際上就是給RecyclerView增加一個FooterView,然後通過判斷是否滑動到了最後一條Item,來控制FooterView的顯示和隱藏。下載刷新同理。
  • 側滑和拖動:拖拽和側滑刪除的功能要藉助ItemTouchHelper這個類,我們只需要創建出一個ItemTouchHelper對象,然後調用mItemTouchHelper.attachToRecyclerView(recyclerView);就可以了。
    我們看一下ItemTouchHelper的構造方法,他需要一個Callback
    public ItemTouchHelper(Callback callback) {
        mCallback = callback;
    }

這個Callback是ItemTouchHelper的內部類,所以我們需要寫一個類繼承自ItemTouchHelper.Callback ,然後重寫裏面的方法

  1. 數據的各種存儲方式
    (1)SharedPreferences。適用於保存少量的數據,且這些數據的格式非常簡單:字符串型、基本類型的值。比如應用程序的各種配置信息、解鎖口令密碼等。
    (2)文件存儲數據 。文件存儲方式是一種較常用的方法,在 Android 中讀取/寫入文件的方法,與 Java 中實現 I/O 的程序是完全一樣的,提供了 openFileInput()和openFileOutput()方法來讀取設備上的文件。
    (3)SQLite數據庫存儲數據。SQLite 是 Android 所帶的一個標準的數據庫,它支持SQL 語句,它是一個輕量級的嵌入式數據庫。
    (4)使用ContentProvider存儲數據。主要用於應用程序之間進行數據交換,從而能夠讓其他的應用保存或讀取此 Content Provider 的各種數據類型。
    (5)網絡存儲數據。通過網絡上提供給我們的存儲空間來上傳(存儲)和下載(獲取)我們存儲在網絡空間中的數據信息。
  2. 斷點續傳下載,續傳上傳
    多線程下載的原理實際上與單線程下載的原理並無區別。
  • 首先,多線程下載只需要確定好下載一個文件需要多少個線程,一般來說最好爲3條線程,因爲線程過多會佔用系統資源,而且線程間的相互競爭也會導致下載變慢。
  • 然後,下載的時候將文件分割爲三份(假設用3條線程下載)下載。創建與下載文件同樣大小的空殼文件RandomAccessFile,它的開始結束爲止用以下代碼conn.setRequestProperty("Range", "bytes=" + start + "-" + end)確定。
  • 最後就是斷點續傳了,只需要才程序停止下載的時候記錄下最後的下載位置就好了,當下次下載的時候從當前停止的位置開始下載。
  1. app在斷網情況下怎麼保存用戶信息(數據緩存)
    Android客戶端緩存機制是android應用開發中非常重要的一項工作了,使用緩存機制不僅可以爲客戶節省流量,同時提高了用戶體驗。分爲文字緩存和多媒體文件緩存。
    首先是文字緩存:將服務器交互得到的json數據存入sd卡中,並在數據庫添加該數據的記錄。添加數據庫記錄時,可以提供2個字段,請求到的Url和本地保存後的文件地址,每次加載數據之前都會根據Url在數據庫中檢索。
    然後是媒體文件緩存:主要是圖片三級緩存,現在流行的圖片加載框架都支持三級緩存。如果是自己實現三級緩存,主要 用到的Lrucache。

  2. Activity現場保存,現場恢復

  • 現場保存:重寫onSaveInstanceState()方法,在此方法中保存需要保存的數據,該方法將會在activity被回收之前調用。
  • 現場恢復:通過重寫 onRestoreInstanceState()方法可以從中提取保存好的數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章