原创 Java ClassLoader機制

前言 類加載器將類加載到JVM中,Java的類加載採用父親委託機制,除了根類加載器之外,其他的類加載器都會有一個父類加載。當Java程序請求加載器加載類是,加載器會首先請求它的父加載器去加載,若父加載器能夠加載則由父加載器加載,否

原创 熱修復簡單實現

前言 最近項目上的事情比較少有不少空閒時間就來研究一下熱修復技術,熱修復功能可以用來爲剛發佈的應用修復比較嚴重的bug,或者爲用戶推送一些小的功能給用戶使用。實現的主要原理是從網絡上下載帶修復功能的補丁文件,然後通過反射技術將補丁

原创 Android BaseDexClassLoader源碼閱讀

前言 Java的類加載使用父類加載機制,Android開發採用的同樣是Java語言,不過它並沒有採用JVM實現的ClassLoader類,Android內部使用的是BaseDexClassLoader、PathClassLoade

原创 Java死鎖問題簡析

前言 在多線程編程中死鎖是一個常見的問題,我們都知道死鎖的出現有四個必要條件:資源互斥使用,也就是說每個資源一次只能有一個線程使用;佔有並請求,所有的線程都持有它們目前請求到的資源並且申請還未得到的資源;不可剝奪,也就是說所有線程

原创 Java多線程安全

多線程能夠提高CPU的使用效率,爲用戶提供宏觀上同時執行多個動作的效果,強大的功能背後也存在線程安全性問題。多個線程同時操作共享變量導致程序輸出結果與設計者的初衷不符,編程過程中可以使用以下幾種方式實現線程安全。 鎖同步機制 在多

原创 Android與Java Thread

Java語言中使用java.lang.Thread類代表線程對象,它繼承了Object類型,並且實現了java.lang.Runnable接口,在JVM調度運行Thread的用戶代碼時就調用Thread.run()方法。在Thre

原创 Android中異步消息和同步屏障

Android消息隊列MessageQueue中加入的消息分成同步消息和異步消息,在平常開發中接觸到的消息基本上都是同步消息,同步消息會被放到消息隊列的隊尾,Looper在消息循環時從隊列頭部不斷取出同步消息執行。 在Androi

原创 Java簡單線程池實現

需要開啓新線程執行異步代碼的時候通常都是new Thread()創建新的線程對象,創建線程過程中會向系統申請資源,造成任務啓動變慢,直接開啓的線程沒有統一的管理機構,如果用戶不斷的創建新線程也沒辦法控制最多啓動的線程數;直接開啓的

原创 Java職責鏈模式

職責鏈模式中有多個能夠處理請求的對象RequestHandler,這些處理對象按照先後順序連接成一條處理鏈。在發送請求時只需要把請求傳遞給排在鏈表頭部的RequestHandler對象,請求對象會在處理鏈內部傳遞最終由某個Requ

原创 Android HTTP編程基礎

HTTP協議是一種請求響應式通信協議,通常是客戶端向服務器端發送資源請求,服務器接收到客戶端請求後返回對應資源響應,兩端不斷重複請求響應的過程就完成了客戶端與服務器端的會話操作。HTTP是運行與TCP協議之上的應用層協議,它定義自

原创 Android加載圖片佔用內存

圖片在內存中的存儲基於位圖模式(通常也稱作Bitmap),它把圖片的長寬定義成多個像素點,每個像素點的顏色值有幾個像素來保存,對那些尺寸比較大的圖片一張可能就佔據十兆左右的空間,應用只要多存儲一些大尺寸照片就會導致內存溢出。And

原创 Android內存泄漏問題

Java內存垃圾回收由專門的垃圾回收(Garbage Collector,GC)後臺線程維護,自動回收機制減輕了開發者的負擔,讓開發者能夠更加專注於業務功能的處理。GC回收已經相對比較智能,能夠辨別出簡單的垃圾對象和正常使用的對象

原创 自定義評分控件實現

評分控件在開發中算是使用率比較高的組件,Android自身也包含默認的評分控件,不過自帶的評分控件可定製性並不高,現在就通過自定義View的方式來實現簡單評分控件。自定義的評分控件繼承自View類型,它需要覆蓋View的三個構造函

原创 下拉刷新實現

下拉刷新在Android應用開發中是一種很常見的交互方式,在實際開發中都會引用第三方的下拉刷新庫來實現,第三方庫通常都經過多個應用程序集成測試,有着相對較高的穩定性和可靠性,裏面的代碼邏輯也相對比較龐雜,對新手相對不太友好,學習起

原创 不規則佈局實現

佈局控件繼承自ViewGroup類,它可以包含多個控件並能夠按照自己的規則排列控件的位置。不規則佈局控件來自筆者開發過程中遇到的業務問題,設計人員希望客戶端能夠根據返回的數據條數不同而展示不同的佈局樣式,返回的數據可能有二三四五四