原创 中綴表達式、後綴表達式棧實現小記

這裏實現了一箇中綴表達式計算器: Stacktest.InfixCalculator.calculate("1 + 2 * 3 + ( 4 * 5 + 6 ) * 7") = 189 主要難點在於中綴表達式轉換成後綴表達式,其

原创 參考ListView爲RecyclerView添加Header、Footer和Loader

上一篇博客中分析了ListView添加Header的原理,接下來我們就參考listview的實現原理來爲RecyclerView添加Header。 RecyclerView的Adapter已經不再是基於View進行復用,而是基於V

原创 Java線程池配置

Android線程池來自Java的Executor接口,真正實現類是ThreadPoolExecutor。AsyncTask、OkHttp等中都涉及到線程池的配置因此線程池的配置十分重要。 ThreadPoolExecutor p

原创 二叉查找樹代碼實現

定義 對於二叉查找樹的每個節點X,它的左子樹中的所有項的值都小於X項的值,而它的右子樹中的所有項的值都大於X項的值 insert 遞歸實現 /** * 遞歸實現 * 由於t引用該樹的根,而根又在第一次插入的時候

原创 Android 架構組件簡單小結

Android官方提供了一組架構組件(Android Architecture Components)用來幫助開發者創建健壯、易測試和可維護的apps。包括Lifecycle、LiveData、ViewModel和Room Per

原创 WakeLock小計

由於手機存在休眠策略,所以停止使用一點時間後CPU可能會停止運行進入休眠狀態,爲了保持CPU的一直喚醒,安卓提供了WakeLock相關API,這裏做個簡單小結。 爲了獲取WakeLock,先要拿到PowerManager。 Pow

原创 A*尋路算法Java實現

A*算法: 把起始格添加到開啓列表。 重複如下的工作: a) 尋找開啓列表中F值最低的格子。我們稱它爲當前格。 b) 把它切換到關閉列表。 c) 對相鄰的8格中的每一個 如果它不可通過或者已經在

原创 遍歷和遞歸實現雙向鏈表反轉

面試中經常問到雙向鏈表的反轉問題,下面參考《數據結構與算法分析》給出個LinkedList實現,同時討論雙向鏈表的反轉實現。 public class LinkedList<E> { private Node<E> hea

原创 AsyncTask源碼分析

AsyncTask是Android提供的一個異步加載任務的工具類,AsyncTask源碼其實不是特別複雜,不過由於在Android3.0後進行了修改,導致AsyncTask的使用還是很容易入坑的。 public final Asy

原创 layout_marginEnd 導致動態設置setLayoutParams失效的巨坑

targetSdkVersion >= JELLY_BEAN_MR1(17)時,在xml佈局中我們設定marginLeft或marginRight會看到這種提示 “Consider adding android:layout_ma

原创 BitmapFactory.Options

BitmapFactory.Options與drawable之間的關係 在開發安卓程序的時候,我們經常把圖片放在[drawable][6]、[drawable-hdpi][6]等等下,這對解析出的bitmap有什麼影響嗎? 解析一

原创 GridLayoutManager 高度與設定不一致的坑

最近在使用GridLayoutManager的時候,效果什麼的都是好好的,突然在一臺設備上發現item高度和設定值不一樣。找了好久的原因發現是老版本GridLayoutManager的坑。特作此篇做個記錄,並簡單分析GridLay

原创 Lifecycle啓動源碼分析

首先從Lifecycle的manifests文件說起: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="andro

原创 先說說ListView是如何實現addHeaderView的

在谷歌推出RecyclerView之後,由於其強大的解耦和定製能力等優勢,現在項目中已經基本採用RecyclerView來替代傳統的ListView了,不過RecyclerView並沒有提供之前ListView中應用非常廣泛的ad

原创 Gradle閉包委託總結

作爲一個還處於入門Gradle的小白,記錄一下對Gradle閉包委託的理解。 比如在 《Android Gradle權威指南》 可以看到類似如下代碼段: static def person(Closure<Person> clo