原创 Android中HashMap分析

本文源碼基於AndroidSDK  28裏的代碼分析,其它的也大同小異,由於SDK裏的源碼不能Debug,這裏就自己創建一個MyHashMap來分析   基本使用 MyHashMap<String,String> map

原创 第四天(內存泄漏以及OOM)

內存泄漏造成的原因: 是生命週期長的對象持有生命週期短的對象的引用,造成生命週期短的對象使用完之後無法釋放內存; 內存泄漏出現的場景 1.單例中的static成員間接或直接持有了activity的引用 2.非靜態內部類持有父類的引用,如非

原创 第五天(UI繪製的流程及原理)

每當我們在Activity或者Fragment裏面setContentView 是怎麼將一個佈局或都一個View添加到窗口的呢. 當setContentView(R.layout.activity_main)的時候 會跳轉到Windo

原创 淺談哈希表和解決哈希衝突的幾種方法

哈希表也叫散列表 它的底層是通過數組也存儲元素的,他裏面有個hash函數,將一個key傳給hash函數,他會利用這個key生成這個key對應的索引,他的複雜度是O(1),所以得用哈希表來去完成映射的添加,搜索,刪除的話,總的來說時間複雜度

原创 Rxjava從使用到原碼的解析十三: Rxjava線程切換源碼分析(終結版)

先來一段標準代碼分析 Observable.create(new ObservableOnSubscribe<String>() { @Override public vo

原创 Android事件分發的詳解

當用戶點擊屏幕時,將產生的觸摸事件分爲以下四種 ACTION_DOWN剛剛觸摸屏幕 ACTION_MOVE 手指在屏幕滑動 ACTION_UP:手指離開屏幕 ACTION_CANCEL 非人爲因素的取消 事件分發的對象有 Activity

原创 第二天(MVP和MVC是什麼,有什麼區別)

一天一面試題---第二天(MVP和MVC是什麼,有什麼區別) MVC: View接收到用戶的操作之後,將用戶的操作來交給Controller(activity),Controller完成業務邏輯,將得到的結果封裝成Model,再進行Vie

原创 組件化4---組件之間相互跳轉的邏輯實現

完整組化件和插件化可以參考我的github項目,已經用在線上項目中 上面三篇文章我們已經瞭解了組件化的原理和一些跳轉思路,下面我們就一步一步來搭建我們的組件化架構. 首先是環境的搭建,可以參考上面三篇文章 其次是搭建apt環境 1: 創建

原创 多線程: 線程的生命週期及死鎖的解決方法

線程的生命週期分爲以下幾種情況 1:當創建一個線程的時候: New的狀態 2:執行start: 就緒狀態,這個時候還沒有運行,需要分配CPU的資源才能運行 3: 運行狀態: 該線程被調度了分配到了CPU資源 4:如果一切正常,線程裏的代碼

原创 多線程併發之對synchronized和Lock的簡單使用

鎖 比如有三個線程thread-0,  thread-1,  thread-3 三個線程同時在執行一個帶鎖的方法時,如果thread-0先獲得了鎖,那麼其它二個線程就只能外面等着,直到thread-0把鎖給釋放了,這個時候就由其它線程去爭

原创 多線程: 鎖的妙用之消費者,生產者的運用

有這樣一個需求,每當一個生產機器生產出一個麪包的時候,要等消費者消費完了再繼續生產.   package com.ancely.fyw; public class FoodDemo { private String mFoo

原创 Java個人對線程和進程的理解及面試相關

進程: 操作系統運行程序時分配資源的最小單位,進程和進程之間是相互獨立的 線程: cpu調度的最小單位,它必須依賴於進程.線程在運行時會佔用該進程的部分資源,線程之間是可以共享該進程所擁有的全部資源.但是線程與線程之間也有自己的獨立空間,

原创 Java個人對泛型的理解(二)之通配符

Java個人對泛型的理解(一) 泛型中的通配符爲  ?--它會讓泛型使用起來更加靈活, 通配符有下面幾種用法 1: List<?> list = new ArrayList<>(); 2: List<? extends Activity>

原创 Java個人對泛型的理解(一)

Java中的泛型<T> 作用: 是將運行時的異常轉到編譯時來處理,代碼更健壯,更簡潔,更靈活,複用性強 AIShoes<T> ; T爲類型參數  AIShoes<Nike>中的Nike爲實際類型參數  AIShoes<T>: 這一整個爲泛

原创 Android中如何通過keystore生成https證書,並設置證書到我們請求

需要使用keytool命令 輸入keytool --help 會出現下面幫助類  -certreq            生成證書請求  -changealias        更改條目的別名  -delete             刪