原创 Android 源碼解析 - ScrollView

ScrollView 可以在垂直方向做滑動顯示內容,並且ScrollView中只能添加一個子View,下面對源代碼進行分析。 源碼解析 ScrollView 繼承關係 onMeasure方法 @Override protected vo

原创 避免使用startActivityForResult

startActivityForResult 所有處理結果的邏輯都要放到onActivityResult中,在onActivityResult裏面根據requestCode作不同處理,這樣邏輯比較複雜, 我們希望的是能在發起startA

原创 動態規劃-挖礦

有一個國家發現了5座金礦,每座金礦的黃金儲量不同,需要參與挖掘的工人數也不同。參與挖礦工人的總數是10人。每座金礦要麼全挖,要麼不挖,不能派出一半人挖取一半金礦。要求用程序求解出,要想得到儘可能多的黃金,應該選擇挖取哪幾座金礦? 第一個

原创 有狀態對象和無狀態對象

1、進程與線程的關係 進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動, 進程是系統進行資源分配和調度的一個獨立單位. 線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位. 另外,進程

原创 設計模式-建造者模式

定義 官方定義:將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示,通俗的說就是:建造者模式就是如何一步步構建一個包含多個組成部件的對象,相同的構建過程可以創建不同的產品 特點 建造者模式是一種創建型模式,適用於那些

原创 Mac上一鍵反編譯Apk與查看jar文件

將需要反編譯的Apk(**.apk無需重命名) 拷貝到 apk 文件夾下,然後運行run.sh 腳本,反編譯完成後會自動打開Gui 工具查看反編譯後的文件。 拷貝文件 運行腳本 反編譯後的結果 工具下載地址

原创 Java併發:volatile解析

一、Java 內存模型 Java內存模型規定所有的變量都是存在主存當中(類似於前面說的物理內存),每個線程都有自己的工作內存(類似於前面的高速緩存)。線程對變量的所有操作都必須在工作內存中進行,而不能直接對主存進行操作。並且每個線程不能訪

原创 Glide 源碼解析(一) 加載流程

Glide介紹 Glide 是Google 員工 bumptech 開源的一款圖片加載框架,相對於UniversalImageLoader,Picasso,它還支持video,Gif,SVG格式,支持縮略圖請求,旨在打造更好的列表圖片滑動

原创 Android 框架-ImageLoader 圖片加載框架

Android 開發中我們會經常會加載網絡圖片的需求,目前成熟的圖片加載框架有 Fresco、Glide、Picasso, 比較老的還有UniversaclImageLoader(15年開發的時候還在用這個開源庫,可惜現在已停止維護了)。

原创 計算器的實現-Java 代碼

用Java 實現的計算器,原理看代碼註釋 public class MyCalculator { public static void main(String[] args) { String obj = "6+

原创 經典的Java算法面試題

1、新浪面試題:編寫一個方法,計算一個字符串中,第一個不重複的字符在當前字符串中的索引。 public class JavaTest { public static String array = "abuacdeaudbdfc

原创 Android 佈局優化-ViewStub 視圖

ViewStub 是一個輕量級的View,View 的寬高爲0,不繪製任何東西,只是佔一個位置而已。 優勢 在需要的時候才加載View,這樣實現了View的延遲加載,避免資源的浪費,減少渲染時間, 因此可以提高頁面的加載速度。 不足

原创 Android 數據庫升級數據遷移以及數據庫導入

在我們開發的應用中,一般都會涉及到數據庫,使用數據的時候會涉及到數據庫的升級、數據的遷移、增加行的字段等。比如,用戶定製數據的保存,文件的端點續傳信息的保存等都會涉及到數據庫。 我們應用第一個版本是V1.0,在迭代版本V1.1 時,我們在

原创 Android 動畫 一篇就夠

動畫實際上就是在指定的時間段內持續修改某個屬性的值, 使得該值在指定取值範圍內平滑過渡。 動畫可以分爲三大類, 幀動畫(Frame Animation)、補間動畫(Tweened Animation)、屬性動畫(Android 3.0

原创 最長遞增子序列-Java 實現

1、Θ(n2) 打表實現 初始化對角線爲 1; 對每一個 i,遍歷 j(0 到 i-1): 若A[i] <= A[j],置 1。 若A[i] > A[j],取第 j 行的最大值加 1。 private static int get