原创 Android的MVP框架

首先來說一下MVC和MVP的區別: MVC(Model-View-Controller),這種模式下三種模型的交互關係如下: 缺點:view可以直接訪問model(比如我們經常在activity中直接操作SQLite、Shared

原创 ListView的item實現滑動、點擊、長按不衝突

要實現這樣的一個功能: 一個ListView,能向左滑動出現刪除按鈕,點擊item進入詳情,長按item進入編輯 也就是說要做到滑動、點擊、長按三個動作互不干擾,滑動時間長了不能觸發長按,滑動後手鬆開不能觸發點擊。 剛開始我用的方法是

原创 android麪包屑導航欄的實現

麪包屑導航的效果如下: 點擊麪包屑上標藍的文字,可以直接返回到對應的級別。比如點擊“第2層”,就能直接返回到第2層下的目錄,而無須依次點返回。 麪包屑導航的原理是通過FragmentTransaction去實現的,下面簡單介紹一

原创 UniversalImageLoader不能加載本地圖片的解決方法

Universal-Image-Loader無法通過絕對路徑直接加載SD卡中的圖片,比如: String imagePath = "/storage/emulated/0/Pictures/Screenshots/pic.png" 如

原创 View的座標系以及X、rawX、translationX、scrollX的區別

簡單介紹一下View的座標系: view的位置由left、top、right、bottom四個屬性決定,這幾個座標可以通過getLeft()、getTop()、getRight()、getBottom()獲取。注意這四個座標是相對座標,

原创 用handler發延時消息時最好設置設爲static

一旦用handler發出延時的message,message會被保存在消息隊列中,這段延時的時間,message會保持對handler的引用,導致handler無法被回收,使用handler的activity和service也無法被回收,

原创 Android的緩存策略:LruCache和DiskLruCache

當用戶要瀏覽微信的某張圖片或視頻時,第一次肯定需要從網絡上下載下來才能看,但如果第二次去瀏覽,還要從網絡上下載就不合適了,用戶體驗差,更重要的是浪費了用戶的流量。當圖片首次下載下來的時候,我們需要對圖片做一下緩存,這樣再次讀它的時候直接從

原创 listview數據錯亂、重複的原因分析與解決方案

目前我們使用listview展示數據時,adapter的getView方法通常使用convertView.setTag(viewHolder)的方式來避免出現卡頓的情況,這種方式能使convertView得以複用,避免重複的調用infla

原创 AsyncTask的使用方法和原理

AsyncTask的本質實際仍是傳統的線程,它封裝了Thread和Handler,底層用到了線程池。它在線程池中執行後臺任務,支持把執行的進度和最終結果傳遞給主線程並在主線程中更新UI。但是AsyncTask不適合執行特別耗時的後臺任務,

原创 Bitmap的高效加載,避免內存溢出

Android對單個應用有內存限制,比如16MB,這導致加載Bitmap時很容易出現內存溢出: java.lang.OutofMemoryError:bitmap size exceeds VM budget 因此我們需要考慮如何高效加載

原创 JVM內存模型與垃圾回收機制

JVM的定義和基本原理 Java語言是通過JVM來實現平臺無關性的,編譯器只需生成.class的字節碼文件,JVM就可以把它們解釋成具體平臺的機器指令執行。也就是說,JVM屏蔽了具體平臺相關的信息,它能把字節碼文件映射到本地CPU的指令集

原创 HashMap的底層工作原理和併發問題

通過源碼分析工作原理 首先來看下HashMap一個典型的構造函數: transient HashMapEntry<K, V>[] table; public HashMap(int capacity) { if (capacity

原创 HandlerThread的使用方法和原理

我們如果想要在子線程中使用Handler,必須要手動創建一個Looper(原理已經在前面關於Handler和Looper的博客中介紹過:http://blog.csdn.net/whsdu929/article/details/52487

原创 android線程池的使用方法和原理

線程是操作系統調度的最小單元,同時線程又是一種受限的系統資源,即線程不可能無限制的產生,並且線程的創建和銷燬都會有相應的開銷。當系統中存在大量的線程時,系統會通過時間片輪轉的方式調度每個線程,因此線程不可能做到絕對的並行,除非CPU核心數

原创 android消息機制 - Handler、Looper原理解析

android的消息機制就是指Handler、MessageQueue和Looper的工作過程。 需要傳遞消息時,由Handler會調用MessageQueue的enqueueMessage方法將消息放入消息隊列中,Looper會不斷從隊