原创 Android視圖繪製原理

Android中的圖形界面通常都是由Activity負責展示,實際上Activity內部展示視圖還分成了三大部件,最外層的Activity負責生命週期、應用上下文資源,最內層的View負責界面展示和用戶觸摸消息派發處理,中間層的W

原创 HTTPS網絡請求原理與實現

HTTP協議屬於明文傳輸,在公共網絡上傳輸數據時很容易被不法分子截獲到,對於像登錄、轉賬之類比較私密的信息傳輸不適合用HTTP協議,爲此業界又推出了HTTPS協議,它實際在HTTP協議和TCP協議之間添加了安全套接字(SSL,Se

原创 Java線程可見性與原子性

有時候用戶希望能夠根據需要結束當前的任務,比如某個線程正在下載一個特別大的文件,已經花費了很長時間還是沒有下載完成,用戶希望取消整個下載操作;可以設置一個停止變量,線程在現在文件期間每讀取1M的數據就檢查一下停止變量的值,如果停止

原创 Android JetPack架構組件介紹(二)

前面已經介紹了Room、WorkManager、Lifecycle、ViewModel和LiveData這些架構組件,接下來介紹Paging分頁組件和Navigation導航框架,這兩個類庫在應用開發過程中也是非常常見的。 Pagin

原创 Android JetPack架構組件介紹(一)

Android在2018年的Google大會推出了Android JetPack工具庫,這個工具庫將常用的功能統一封裝起來,提高開發者的開發效率,提高代碼的複用性。目前JetPack主要封裝的功能包含基礎框架、應用架構、應用行爲和UI

原创 頁面摺疊效果實現

前言 Android手機屏幕相對較小,可能無法一次性將所有的元素都展示給用戶,但有些情況下又確實需要將多個元素同時展示給用戶。比如在外賣下單之後用戶即希望能夠查看當前外賣的狀態也希望能夠直接通過地圖查看到外賣騎士的位置,地圖控件和訂單狀態

原创 ScrollView嵌套ListView問題解析

前言 在MD設計出來之前ScrollView嵌套ListView是很常見的用來處理嵌套滑動解決方案,但是直接將ListView放入到ScrollView它只會展示一行,無法正常顯示出一屏幕的的條目。現在通過閱讀ScrollView和Lis

原创 Javassist基礎使用

前言 Javassist是日本人開發的一款編輯class字節碼框架,可以用來檢查、動態修改及創建Java類。與JDK自帶的反射功能相比Javassist功能更加強大,熟練使用Javassist工具對提高Java動態編程有着重要意義。 常用

原创 GreenDao源碼閱讀

前言 Android客戶端的緩存通常都會放到SQLite數據庫中,不過使用原生的API編寫CRUD操作既費時又容易出現錯誤,項目中通常都會引入第三方的開源框架解決問題。GreenDao是一款優秀的ORM框架,只需要簡單的配置框架會自動爲我

原创 自定義TextView實現

前言 文本展示在Android開發中非常常見,大部分都是用TextView來實現,不過有些文本展示必須要手動調用Canvas來繪製,如果不瞭解繪製文本的原理很難把展示的文本對齊,這裏就來記錄一下文本繪製的各種技巧。 文本測量 在Andro

原创 Smali簡介和實現類外調用父類方法

前言 通常基於Java語言開發程序都是通過調用javac編譯器將源代碼編譯成.class文件,這種文件能夠被JVM識別,加載並執行的文件格式(除了常見的java源代碼生成的class文件,其他的Scalar、Python和Groovy等語

原创 CoordinatorLayout及Behavior實現源碼閱讀

前言 MD設計風格引入了CoordinatorLayout佈局,它能夠協調子控件之間的操作,使得子控件相互能夠做一些複雜的交互操作,這些交互主要通過Behavior對象來實現,這裏就來查看一下Behavior和CoordinatorLay

原创 ThreadPoolExecutor基礎使用

前言 Android開發中由於禁止在主線程中做網絡請求,通常都需要使用線程對象來做異步請求操作,但是直接使用new Thread();創建新線程需要不停的申請系統資源,這些野生的線程缺乏統一管理,相互競爭佔用過多系統資源;直接使用普通的線

原创 Gitlab項目配置

前言 Gitlab可以用來搭建Git倉庫服務器端,具有很好的項目管理和用戶管理功能,目前Gitlab服務端主要部署在Linux相關平臺,Window平臺還沒有對應的部署包。筆者通過在VMWare Redhat Linux上安裝Gitlab

原创 Activity展示流程源碼閱讀

前言 前面查看了Activity啓動的整體流程,現在來看一看Activity裏定義的視圖樹是如何展示到手機屏幕上的。首先開發者通常都會在onCreate裏定義setContentView(佈局文件ID),再運行Activity就能夠將佈局