原创 【白話】App從啓動到頁面顯示出來發生了什麼

點擊App圖標,Launcher進程採用Binder IPC向system_server進程發起startActivity請求system_server收到請求後,向Zygote進程發送創建進程的請求Zygote進程fork出新的子進程,即

原创 【白話】APK編譯打包流程

Java編譯器對工程本身的java代碼進行編譯,這些java代碼有三個來源:App的源代碼,有資源文件生成的R文件(aapt工具),AIDL文件生成的Java接口文件,產出爲.class文件用AAPT編譯R.java文件編譯AIDL的jav

原创 Window,Activity,DecorView,ViewRootImpl之間的關係

Activity不負責控制視圖,只是控制生命週期和處理事件,真正控制視圖的是Window,Activity中含有一個Window,Window纔是真正代表一個窗口Window視圖的承載器,內部持有DecorView,而DecorView是V

原创 白話measure,layout,draw

這三者的順序就相當於蓋房子1)先測量地基,有多大的尺寸可以讓我來操作(measure)2)再來佈局設計,根據測量後的尺寸來設計出符合自己審美的佈局(layout)3)繪製,開始真正的裝修了(draw)Measure主要是調用measure(

原创 finally與return執行順序

Java中異常捕獲機制try...catch...finally塊中的finally語句是不是一定會被執行?不一定,(1)需要執行到try語句中(2)try中如果有System.exit(0)也不會執行,因爲System.exit(0)是終

原创 手寫Glide框架

文章主要是仿照Glide方式來實現了圖片加載,當然功能沒有Glide那麼全面,主要用來練習總結寫一個Glide框架,首先需要我們來分析一下實現思路,主要分了六大步驟,接下來我們會一步一步來實現操作資源封裝活動緩存內存緩存磁盤緩存生命週期圖片

原创 a*2爲什麼比a>>1效率低

a*2 與 a>>1的執行結果是一樣的,但是執行效率不同a>>1執行效率比前者高出很多,主要是因爲在計算時計算機會採用逆波蘭表達式,標準四則運算表達式—中綴表達式9+(3-1)*3+10/2     = 20計算機採用—後綴表達式9 3 1

原创 用面向對象的方式來操作數據庫

正常來說使用sql來操作數據庫的話沒啥問題,但是對於一些不太擅長寫sql的同學來說,通過面向對象的方式來操作數據庫,可以極大的避免寫sql時不小心犯錯誤的情況,接下來讓我們直接進入主題首先是需要先定義接口規範,即數據庫常用的增刪改查操作,這

原创 RecyclerView之拖拽滑動

recyclerview控件大家已經用的非常熟悉了,最近開發時做仿微信發送朋友圈注意到微信選完圖片之後可以對圖片進行拖拽刪除,所以進行了嘗試,其實recyclerview本身已經提供了幫助類,主要是繼承其回調,下面對代碼進行講解分析。pub

原创 android-自定義換膚(1)

本質上來說換膚其實挺簡單的,主要抓住關鍵的點,就是獲取到控件去設置對應的顏色,字體,背景等正常來說我們使用activity來加載一個頁面的時候使用setContentView(R.layout.activity_main); 讓我們進入源碼

原创 android-自定義換膚(2)

android-自定義換膚(1) https://blog.csdn.net/tiangaopan/article/details/104895134前面說到本質上是通過實現LayoutInflater.Factory2,在onCreate

原创 Handler--爲什麼在子線程中可以彈吐司卻不能UI繪製

private void initDeal() { Thread hanMeiMeiThread = new Thread(){ @Override public void run(

原创 Kotlin var與val區別

Kotlin中有兩個關鍵字定義變量,這兩個關鍵字外形看着差別很小就只差了一個字母,但實際差別很大的。var是一個可變變量,這是一個可以通過重新分配來更改爲另一個值的變量。這種聲明變量的方式和java中聲明變量的方式一樣。val是一個只讀變量

原创 java 反射 getGenericSuperclass

public classWomenextendsPerson<Women> {private static finalStringTAG="Women";public voidexecute() { Type type =t

原创 Android 通過反射來隱藏年月日的日-DatePicker

經常會有這樣的需求,就是去隱藏年月日中的年或者日,下面我通過反射來達到這樣的目的現在5.0以上的也需要去單獨判斷一下,有的寫5.0的Build.VERSION_CODES出現錯誤的話,建議直接寫成數字/** * @param pi